Release Notes for 500

Notes for Release 500

101 Likes

Happy 500! :tada:


Client Difference Log

API Changes

Added Class BreakpointManager : Instance [NotCreatable] [Service] [NotReplicated]
	Added Function Instance BreakpointManager:AddBreakpoint(Instance script, int line, Instance condition) {RobloxScriptSecurity}
	Added Function MetaBreakpoint BreakpointManager:GetBreakpointById(int metaBreakpointId) {RobloxScriptSecurity}
	Added Function void BreakpointManager:RemoveBreakpointById(int metaBreakpointId) {RobloxScriptSecurity}
	Added Event BreakpointManager.MetaBreakpointAdded(MetaBreakpoint breakpoint) {RobloxScriptSecurity}
	Added Event BreakpointManager.MetaBreakpointChanged(MetaBreakpoint breakpoint) {RobloxScriptSecurity}
	Added Event BreakpointManager.MetaBreakpointRemoved(MetaBreakpoint breakpoint) {RobloxScriptSecurity}

Added Class DebuggerUIService : Instance [NotCreatable] [Service] [NotReplicated]

Added Class MetaBreakpoint : Instance [NotCreatable] [NotReplicated]
	Added Property string MetaBreakpoint.Condition {RobloxScriptSecurity} [Hidden] [ReadOnly]
	Added Property int MetaBreakpoint.Id {RobloxScriptSecurity} [Hidden] [ReadOnly]
	Added Property int MetaBreakpoint.Line {RobloxScriptSecurity} [Hidden] [ReadOnly]
	Added Property string MetaBreakpoint.Script {RobloxScriptSecurity} [Hidden] [ReadOnly]
	Added Property bool MetaBreakpoint.Enabled {RobloxScriptSecurity} [Hidden] [ReadOnly]
	Added Property bool MetaBreakpoint.Valid {RobloxScriptSecurity} [Hidden] [ReadOnly]
	Added Function int MetaBreakpoint:Remove(Function status) {RobloxScriptSecurity}
	Added Function int MetaBreakpoint:SetCondition(Instance condition, Function status) {RobloxScriptSecurity}
	Added Function int MetaBreakpoint:SetEnabled(bool enabled, Function status) {RobloxScriptSecurity}
	Added Function int MetaBreakpoint:SetLine(int line, Function status) {RobloxScriptSecurity}

Added Class MetaBreakpointContext : Instance [NotCreatable] [NotReplicated]
Added Class ScriptChangeService : Instance [NotCreatable] [Service] [NotReplicated]

Added Class StudioAssetService : Instance [NotCreatable] [Service] [NotReplicated]
	Added Function string StudioAssetService:SerializeInstances(Objects instances) {RobloxScriptSecurity} [Yields]

Added Class StudioScriptDebugEventListener : Instance [NotCreatable] [Service] [NotReplicated]

Added Class ToolboxService : Instance [NotCreatable] [Service] [NotReplicated]
	Added Callback Objects ToolboxService.ProcessAssetInsertionDrag(string assetId, int assetTypeId, Objects instances) {RobloxScriptSecurity} [NoYield]

Added Class Plane : Constraint

Added Property bool ImporterMeshSettings.Anchored
Added Property Enum.RigType ImporterRootSettings.RigType
Added Property bool TextSource.CanSend
Added Property int64 TextSource.UserId [ReadOnly]

Added Function bool AssetImportService:IsAvatar() {RobloxScriptSecurity}

Added Event Instance.Destroying()

Added Enum RigType
	Added EnumItem RigType.R6 : 0
	Added EnumItem RigType.R15 : 1
	Added EnumItem RigType.Rthro : 2
	Added EnumItem RigType.RthroNarrow : 3
	Added EnumItem RigType.S15 : 4
	Added EnumItem RigType.Custom : 5
	Added EnumItem RigType.None : 6

Added Enum TextChatMessageStatus
	Added EnumItem TextChatMessageStatus.Success : 1
	Added EnumItem TextChatMessageStatus.TextFilterFailed : 2
	Added EnumItem TextChatMessageStatus.Floodchecked : 3
	Added EnumItem TextChatMessageStatus.InvalidPrivacySettings : 4
	Added EnumItem TextChatMessageStatus.InvalidTextChannelPermissions : 5

Added Tag [NotCreatable] to Class TextSource

Changed the parameters of Event Explosion.Hit 
	from: (Instance part, float distance)
	  to: (BasePart part, float distance)

(Click here for a syntax highlighted version!)

58 Likes

We reached 500! With that aside, I can’t wait to integrate breakpoints into a plugin of some sorts! I wonder what the implications are for Rojo and external tooling. Looks exciting, keep up the great work!


Removed

Just so you know, your link (here) still points to your CloneTrooper1019 github url, so it has to go through a redirect to get to the MaxiumumADHD one.

12 Likes

:crab: Release 500 is here :crab:

This is kind of hype. When it says vector, does that mean Vector3 or Vector2?

18 Likes

That this symbolic number represents a hope that, one day, who knows, we will have an official tool.
I hope we don’t have to wait for another 500 versions for this…

9 Likes

Instance.Destroying.

Thats it, that’s the post.

24 Likes

Vector3. Generating a Vector2 is both less useful (because our 2D APIs take angles as an input to begin with rather than unit vectors) and easy enough that I didn’t think the API pollution was worth it:

local theta = random:NextNumber(0, math.pi * 2)
local vec = Vector2.new(math.cos(theta), math.sin(theta))

More info on this to come once all the pieces come together, but if you’ve been following the “destroy on server doesn’t destroy on client” issue then this comes as part of the solution to that.

20 Likes

I was messing around with on sitetest studio with an FFlag and noticed it wouldn’t fire if you deleted from the explorer. Is it intentional for this to only fire if you destroy it through Destroy?

3 Likes

Things you delete from the Explorer aren’t actually Destroyed… otherwise you wouldn’t be able to undo their deletion! On that note, if you’re making any kind of user plugin, you should make sure to remove things via .Parent = nil instead of Destroy to properly support Undo / Redo.

18 Likes

image
Never knew Touched and TouchedEnded events were trained in the skill of Plumbing! What does this actually mean?

16 Likes

Increased TouchEnded reliability.

25 Likes

Adding a constraint that will constraint attachment1 to the plane with origin at attachment0’s position with normal equal to attachment0’s primary axis.

I’m having trouble parsing what this actually means. Is this a new constraint? Can you give a use case for this if so?

3 Likes

Happy 500, congrats. This is a great milestone.
I’d like Parallel Luau to be updated to allow me to create parts in a desynchronized thread. Almost all code I write is designed to work in a multithreaded system. Example: Terrain generation.

4 Likes

Well, that explains a lot. Should we also set the Archivable property to false, or will Studio take care of cleaning up all nil instances when saving / ending a session?

Still on topic, let me say that I’ve been waiting for the .Destroying event for as long as I can remember. This will make handling instance-related memory leaks so much easier.


Now, let me take some (hopefully not against forum rules liberty) to talk about this update.

I’ve been using Roblox Studio for well over 12 years. I’ve witness the decoupling of animations from Humanoids, the evolution of the Roblox character, the introduction of the client-server barrier, the addition, removal and re-addition of user-uploadable meshes, one major redesign and two renames of studio.

I believe it’s fit to take this day to look at how far studio has come as a development tool, and how reliable it has been over the years. Despite my (sometimes incessant) complaints about studio updates messing with backwards compatibility, I find that my oldest of projects still work today with little or no change.

Today, I had the distinct pleasure of digging through and replaying one very old game I had stored (as an original .rbxml file, mind you!), only to find that all these years of studio updates had not reduced the magic it once was, but instead have added onto it. It has been a pleasure to be able to play my old games on a device that couldn’t even have been envisioned at the time the game was created without any issues, all thanks to the fact that not once have we been forced to move to a Roblox 2.0 or to abandon our original R6. Our engine has always grown with the community that builds on it.

So, I’d like to thank you all over at Roblox, for over a decade of continuous iteration that lead Roblox Studio to what it is today. We couldn’t have made magic without you.

14 Likes

Nothing about Studio is required there, the engine will, garbage collection will usually clean up instances just fine whether you Destroy them or not.

“Usually”… what’s the “usually”? That’s if you’ve connected to events on the objects being removed, and your event handlers have a (direct or indirect) reference back to the object itself. That will stop the object from being garbage collected because it’s a circular reference, but one that crosses over the C++ / Lua boundary so the garbage collector can’t understand it.

In that case, the Destroying will help, because one of the things that Destroy does is disconnect all of the connections. However, if you’re working with stuff that you need to support Undo / Redo, you’ll just have to manually Disconnect your event handlers properly when moving the object out of the hierarchy.

11 Likes

What is S15? Is it some kind of new R15?

3 Likes

I asked, and, seems to be related to the new skinned clothing & mesh stuff, and potentially the new facial controls. The S stands for skinned.

I also looked and found this somewhat old page explaining S15 imports on Roblox’s Avatar Evolution site:

If facial controls are part of this, I can’t wait for this absolutely disgusting, fear-inducing, going-to-find-and-attack-you-while-you-sleep creature to be an avatar I encounter in DoomSpire brickbattle:

image

For real, I honestly don’t know what it is about the facial controls stuff that get me so bad, and I’m being dead serious about this… Some of it genuinely induces a similar response in me that arachnophobia does, but like, worse. It’s uncanny valley, but on an entirely new level, and oh my god I know it’s going to be even worse when it moves on my screen.

Not all of it’s bad, in fact, I find the facial animations pretty cool overall… But some of those images I have seen I can never unsee

14 Likes

This is on our roadmap after v1

7 Likes

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