How may I compress a detailed string even further?

Have you considered storing values as binary?

Also as far as a part limit goes, I don’t believe the parts themselves are what create lag. It’s more of loading them and if they have physics or animations. In short, it’s more about the operations that occur with said parts.

1.) I have considered storing in binary, but I am not sure if Roblox has any built-in functions for this. Also, I worry if translating large amounts of data back and forth between binary may make loading times significantly longer. If there is a convenient and speedy way of implementing this format as binary, that would be very lovely, indeed.

2.) Most parts that players will have access to are likely to be anchored parts that remain static and look nice, but there certainly will be more dynamic parts that won’t be anchored. I suppose it would be nice if someone roughly knew the comfortable limits of static parts and also the comfortable limits of dynamic parts. I can always do a lot of stress testing, but I wanted to get some estimates before I commit any large amount of time towards that.

As it so happens, I’m currently working on a utility module script that replaces existing functions or adds new functions that I feel should have been in Roblox by default. In the math category, a portion is dedicated to binary/string/number conversion. However, I haven’t done any stress tests on it as of yet.

The only issue with it right now is that it can only handle single byte data. Technically you can use it beyond that, but only if you know what you’re doing. I haven’t gotten around to it yet, but I want to make it more user friendly so anybody could use it for any length of data without issue.

As far as the dynamic part limit, I honestly couldn’t say. I’m not sure if anyone can as by definition, it’s dynamic. It depends how many physics parts are colliding with each other. If a physics object only collides with anchored parts, I believe there would be only a low risk of lag.

This is just from my experiments in the past with attempting water physics with thousands of small sphere parts. It should also be noted that it may depend on the user’s hardware as physics can and in some cases is automatically handled by the network owner.

1.) That sounds excellent, if you can link the module, I’ll check it out and if I use it in my game, I will add you to the credits.

1.a) I would assume all you have to do is run a for loop on a string, getting one character/byte at a time (well, as I write this, I just remembered there are a few characters that take up multiple bytes) to make the functions more compatible with larger data, but surely it is more nuanced than that.

2.) That’s fair, I suppose I will have to mess around and see if any issues arise with certain objects/parts/models in large quantities.

I’ll see if I can fix it up the way I want before I link it. I don’t think it’ll be too difficult, I’ve just been pretty lazy about it.

Also the module is still in heavily development and isn’t fully tested outside of direct scenarios. I’ve kind of been wanting to build up a lot more features before I officially released it (although I’m sure I would continue to have more to add to it over time).
Furthermore, it also doesn’t have any API documentation as of yet. Lastly, I’ve avoided releasing it this early as I may decide to redo how certain functions work, and I don’t want to start supporting legacy functions at such an early stage.

No rush, if you feel it is too unfinished, you don’t have to link it right now. It’s no big deal. Better compression isn’t absolutely necessary (its already pretty compressed), its just a little quality of life improvement I was going to implement.

Once I fix it up, I can link an “indev” version. Perhaps you’ll be able to find any issues with it so I can improve upon it as I continue developing it.

I was also planning on connecting it with a plugin to make it easier to configure things in the future, perhaps even including an API menu without having to build an actual website like some other more talented people have done.

(This is a bit off topic, but I also plan to work on a developer suite of sorts in addition to this module. It would include things such as a more advanced output for both studio and in-game, as well as an explorer for in-game that can toggle between client/server operations. Just to name a few features I had in mind.)

Anyway, I’ll get on finishing up that binary functionality now.

Sounds good, but also on the last part, I have made an in-game hierarchy explorer for my own development GUIs, if you’d like some of its code. Its kind of rudimentary, but it gets the job done.

Does it include object properties? If not, you can use my API Service module with the GetProperties() function. That module will also be included with my main module that I was talking about.

It does use object properties. It allows you to conveniently see the paths of instances within the data model and allows you to view their properties. Sadly, I never got around to making it switch to client explorer (only does server currently).

Did you use an API dump, or did you do a check with a list of every property? I wish Roblox had built-in functions for that. But that’s exactly why I’ve been working on these modules.

I don’t think you need all the properties you’re saving, more specifically CanTouch and CanQuery only really affect scripting and not building.

I used an API dump, but yeah, there really should be a :GetProperties() function.

Also, here is an example of what the Gui looks like, if you need any code from its features so far.

The left and right sidebars of the Gui may be things you want, I am unsure.

1 Like

CanTouch and CanQuery probably will never be used, but its only 1 character to store them, so I thought might as well. Not all values will be used. In the case a value isn’t used, it will take only 1 character (for the termination symbol), possibly less if that termination symbol is in series with others.

Sorry it’s taking so long. I’m now writing table related functions like Reverse, Sub, and now Split. I try to add things as I think of them or as I find a need for them. The main module uses a lot of itself or other parts of itself.

Here’s a bit of what I mean:


Do not stress about it. This is a low priority thing for me. Go at your own pace. You don’t even need to share it if you do not want to or are unready.

Also, if you need a specific source for the API dump, feel free to use Anaminus’s. It’s what I use and it hasn’t failed me yet.

You can find a JSON for it here.

I included the tool I used to get the latest version in the thread I linked earlier. It generates a dump when you execute it. All credits to the creator of that tool. All I really did was write code to navigate and output easier to use data via module functions.

That took quite a lot longer than I expected, but I’ve finally got it all working, at least as far as I’ve tested.

Though even if the module is still in heavy development, I kind of rather wait until I have a plugin to release along side it. The plugin would include the ability to auto-update the modules or allow you to load in a specific version. It would also include things like an update log and API documentation in the future.

I think I may work on a primitive plugin, just so I can release this the way I want to even in its early stages. I’ll try to have it done by sometime tomorrow as I’ll probably be going to sleep soon. I’ll make a proper thread for it as well at that time.

Like I said, no rush and no worries. I have many other things I need to work on myself, better compression is not the highest priority for me. Take your time, no rush on anything.