As a Roblox developer, it is currently impossible to send network messages over anything other than a reliable ordered channel. This is a huge problem for networked game state that needs to be sent very frequently. Re-transmissions and acknowledgements are nice for data that must get there eventually, but it really blows for state that is just going to be immediately sent again in the next network step.
The biggest use case for something like this is custom character replication. We only care about the most recent position and orientation of a replicated character, and we don’t want old stale state to be re-transmitted to us.
I propose adding the property RemoteEvent.Reliability which determines the reliability type of network messages sent using it. This property would be an enum, and could include ReliableOrdered (the way it works now), Unreliable (packets may be dropped), and UnreliableSequenced (same as unreliable, but only the most recent message is accepted).
Being able to send unreliable messages is a bare necessity for creating low-latency multiplayer games. In my opinion this would allow developers to fine tune their games’ networking in order to deliver a more consistent experience.
I’m bringing this back up, since I think this is one of the things that makes it impossible to make your game’s code 100% secure; right now, network ownership and physics simulation in general are finicky and easily exploitable. A client can fly around, phase through walls, fling other players off the map, and there’s not much that can be done to stop it (other than anti-cheat systems that may have false positives). With unreliable signals, custom humanoids and physics systems could be implemented to make more secure games.
Of course, we still don’t have much control over the physics system either, so even with this we would (with the current APIs) have to rely on the internal replicated physics system and the unsecured nature of network ownership, but having a simple property to make remotes unreliable would be the first step in making custom/secure characters easier.
This would be an amazing feature and I’d really appreciate them adding it. I have a lot of dream games I want to do that rely on combat built around timing , but they’re basically impossible without this
More details here on the issues with remotes right now:
I personally feel that this is more than just something that would be nice to have. It’s simply a necessity for the future of the platform– specific fast-paced gameplay cannot function with the current delay, and this feature request is a healthy step in the right direction.
It’s invaluable in a multitude of different use cases.
Bringing this back up because unreliable packets are simply a necessity to develop smooth moving characters especially in pvp settings.
Currently everytime you drop a packet roblox will essentially halt all network traffic for ~half a second until the dropped packet gets resent from the server.
To illustrate how bad the problem actually is I created a visual example what it currently looks like when your drop a packet.
The server is moving the brick at 60 HZ, at 0% packetloss, pretty smooth:
Now I introduced 1% packetloss via a network emulator which is still considered perfectly normal depending on where you live and wouldn’t cause any problems even in most fast paced online FPS-games.
You can visually see everytime a packet gets dropped and the ping goes all over the place:
This is what 5% packetloss looks like which should still be managable with unreliable replication, notice how the ping goes back to normal as soon as the network emulator stops dropping packets near the end of the video:
There is only so much interpolation can achieve if you have to work with constant 500ms ping spikes.
Furthermore physics replication seems to be more or less unaffected by packetloss based on my testing.
Roblox’s own character replication works kind of works even with unrealistically high packetloss scenarios as in the positioning of characters will unaffected by the packetloss induced high ping while character animations will wait in the queue as they rely on property updates instead of physics to replicate resulting in the characters playing the wrong animations for what they are doing.
Gotta vouch pretty heavily for this idea. Networking on Roblox as-is has issues, but this is the biggest one for certain. @Kampfkarren’s blog post above has an excellent use case that can be applied to a broad developer need.
Reliability types are a must for more technically complex games and systems to shine on Roblox. Custom character replication systems, low-latency competitive games where milliseconds count and more are all things that I would love to create, and I have plans to do so, but these are hindered by the forced reliability of events.
This is needed now more than ever. With Roblox reaching new technical feats year after year there’s only so much we can do in certain areas until we’re limited, and this is one of those things where we’re limited currently.
Thanks for bumping this and for the feedback so far. We’ve shared this thread with the engine team. They are looking into addressing this need, and we will follow up when there’s more to share on our end.
Thank you a lot for the update! I hope we see it soon - I think unreliable events are necessary to have high quality fps games on Roblox, as you need to update where the player is looking constantly. If Roblox wants us to target those with worse computers and worse connections, then we need the tools to do so- reliability types are essential in letting, e.g. wireless connections, play our games.
I’m actually really excited to see this- it’s really important that us developers make our games playable for those on subpar connections. I wonder just how many players are locked out of games because of this…
I think this would also be fun to make a remote event that can be fired every frame, since if you set its reliability type to unreliable, you can do stuff like replicate/sync head rotations and whatnot (since currently you can still do it, it would just lag server because remote events are set to ordered or reliable)
I don’t think Client can replicate Motor6D animation to server without remotes even if the character has network ownership of their character. Doing the head rotation on server could work if a regular script is inside the character, still prefer doing it on RemoteEvents (because i am bad developer)
So yeah reliablitity types would be useful to have l o l