Release Notes for 662

whats this even mean tbh

4 Likes

I noticed this in the release notes for 661 (Release notes for 661 | Documentation - Roblox Creator Hub), but it disappeared from 662…

Does this mean it’s a cancelled feature or will it just show up in the next release notes when it’s live?

6 Likes

Release note 6666 maybe loooool

3 Likes

I hope one change to the part sleep system will be the ability to tell the engine to never allow specific parts to sleep. This has been a long requested feature and due to a lack of it we have to resort to hacky workarounds like AlarmClock. It surely doesn’t take much to add a simple boolean property to BasePart called “DoNotAllowSleep” or simillar.

3 Likes

Will you get automatically disconnected if you’re force-joining someone that’s in a non-cross-platform server?

5 Likes

It’s approximately in late March

4 Likes

It’s something on why I’ve been waiting for Version 662. It’s a great addition for the autocomplete and standalone Studio.

It’s FFlagLuauExtendedSimpleRequire and fixes a “bug”.
Luau require() tracer issue, can't construct partial "paths" with instances in Old and New Solver.

Here’s a quick summary on what this change is.

-- Right now, my Module script is inside "NOW"
-- But later when the script runs, it will be moved into "AFTER"

local FolderLocation = game.FolderLocation.AFTER :: typeof(game.FolderLocation.NOW)

local Module = require( FolderLocation:WaitForChild("ModuleScript") )

-- Autocomplete works!

Previously, the Require Tracer would return type any, if any of the paths were “obstructed” by :: typeof.

 

I don’t really know where the initial motivation to actually fix the issue came from, but I always had it.

I went to Luau and I’ve asked about how the require() autocomplete works. And found out that it’s the Require Tracer. Which is apparently legacy and doesn’t contain the require-by-string by itself.

So, I studied and attempted to modify it, and when I succeeded I posted a screenshot of it in Luau. When that happened, internally apparently 2 or more were adding this fix at the same time I was. At the end someone from Luau implemented it, with more than just support for typeof but also “groups”.

And that’s how this fix came in place.

 

Later I mentioned asked on how there could be support for ObjectValue.Value for the Require Tracer, but only someone with Roblox Resources can fix it…

I experimented with fixing it for tables though, just for practising, and I ended up to one partial solution, there can probably be more. But I think whenever aliases for require-by-string get implemented and etc. I think that’s gonna be good as well… No clue how they’re gonna do the autocomplete for that one as you’re writing the path through the DataModel.

14 Likes

Curious if that’s something you actually need, what’s the use case?

6 Likes
game
├─ ServerStorage
│  ├─ Folder
│  │  ├─ ModuleScript
│  │  ├─ ModuleScript_Data
│  │  ├─ MoreFolders
│  │  │  ├─ WhatIsEvenHappening
│  │  │  │  ├─ Folder
│  │  │  │  │  ├─ ModuleScript_ThatWantsData_SoItIsNotRecursiveRequire

It was a thought once, from longer ago, but it is a use case. Instead of doing script.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent

Now, if I ever remove one folder, you know what that would mean.

You could just have an ObjectValue that holds the Value which references the ModuleScript. This sort of linking is useful. Now, what you can’t have yet is linking an ObjectValue so it points to another ObjectValue’s value.

Along with that, I feel like I am gonna end up finding some issues if I play around with the New Explorer Beta and ObjectValues, but :person_shrugging: I don’t think everything the C++ one has, was brought into Luau yet.

I am yet waiting on or wanting to explore more about this https://devforum.roblox.com/t/objectvalue-instance-problems-properties-that-hold-an-instance-require-innovation-refpropdescriptor/3084990 I feel like ObjectValues can be enhanced but aren’t yet.

 

We also don’t have local packages that function in that same sense.

https://devforum.roblox.com/t/you-should-use-packages-yes-you/3182086/13

These Local Packages ideas are heavily inspired by Valve’s Prefabs from Hammer Editor then Source 2’s Tile based Editor that uses references that act as prefabs and etc.

It’s all about linking things together. And ObjectValues do this visually.

 

When I first used Roblox, the way on how I made UI was by using ObjectValues to reference their location in the DataModel, because otherwise you’ll enter scripting hell.

Not only is this method good, but you can explain it to anyone that doesn’t script. All they have to do to swap the UI, is simply re-link it with ObjectValues. It’s simple.

12 Likes

release note 666: meshpart filtering and surfaceappearance filtering

3 Likes

This is actually something I also need that I recently ran into while developing a module. Basically, my use case for this is abstraction and ease of development.

I have been developing an Enums module that is meant to store multiple custom enum values to be used by my games framework, with the custom enums being used for stuff like a custom character state machine, custom damage types, replication logic settings, ect. Its really convenient to use due to the script autofill showing the options for each enum while scripting.

The Enums module uses an Enum module to create each custom enum:

image

The problem, however, arises when I want to create an enum for limited/internal use that the rest of my game doesn’t need access to. To do this I used an object value to link to the Enum module, as it was quick, readable, and simple:

This is primarily done for the parts of my game that aren’t really a part of the game framework, like scripts that control vehicles.

3 Likes

just use string enums, hell theyre even supported by the type solver properly because of string literals

type MyEnum = "Foo" | "Bar"

Require by string fixes this, once a way to create ailiases is added to roblox

http://rfcs.luau.org/require-by-string-aliases.html

Require by string can trace ObjectValue.Value? :thinking:

What it will fix is that you can use require("@DesiredPath/Location") without :: typeof because :: typeof will also change the type.

And ReplicatedStorage isn’t ServerStorage if you’d be doing local Location = game.ReplicatedStorage :: typeof(game.ServerStorage)

for the Require Tracer

I know it’s generally against your policy to document how things work internally, but could you provide a more detailed explanation of this? When you mention sleep code, I’m assuming that you are talking about wait(), delay(), and the equivalent in the task library.

Specifically, what changes would have to be made and under what conditions would those changes be made?

1 Like

See above link for what it is. As to what changes: Ideally, none.

The idea is that the sleep system should “just work”, just being an optimization rather than a system of the engine which developers have to explicitly think about.

Unfortunately, sleep systems never quite end up living up to that in reality: There’s always at least some obscure edge cases which sneak in where something can get stuck sleeping when it shouldn’t be. Developers could even have been unintentionally be relying on something sleeping previously that now wakes up like it should. Etc.

That’s why the three-phase rollout is there, not because we’re expecting specific things to break.

After reading the page at the above link, I now understand the sleep system and what it does. I did not know that it was called the sleep system. So this is a direct improvement of the engine’s physics simulation. Does this improve engine performance when multiple parts are awake? I’ve had situations (during a simulated nuclear blast) where things got blown to pieces and it took minutes for the engine to properly simulate the movement of all those parts. I’m talking about a part count > 1000.

And thank you for the response.

Unfortunately the situation where everything is blown to bits and moving around rapidly is not what the sleep system is intended to help with :sweat_smile:

Sleeping is mostly about letting you have a lot of potentially movable objects in the scene without having to pay much cost unless they actually move. For example, all your buildings having doors with physical hinges.

7 Likes

I knew about this but it unfortunately doesn’t fit my use case, as I need the same functionality as the Roblox Enums for some of my custom enums, such as the Enum:GetEnumItems method. Because of this, I ended up just going ahead and emulating the Roblox enumeration system.

2 Likes