I made a nifty little tool called RBXport. It is a Lua script you can run on your computer to parse rbxlx files and convert them into an RbxRefresh Visual Studio Code project. It has no dependencies, and is only 413 source lines of code at the time of writing. If you want to salvage its components for your own purposes, I will describe how it works after I describe how to use it.
Setup and use
-
Navigate to the GitHub repository and copy the Lua source and paste it into a file (or download it, if you are a civilized human bean). We will refer to this file as
RBXport.lua
. -
Open up a command line and
cd
to the proper directory.To open a command prompt, type cmd into the Windows start menu search. To change the working directory to the Desktop, you would type
cd Desktop
(and press enter) and this wouldchange directory
(hencecd
) to the Desktop. Typels
(and press enter) to view the files under the working directory. If you don’t know what you are doing, make sure yourRBXport.lua
file is on the Desktop so you can easilycd
there. -
Run
lua RBXport.lua PATH_TO_FILE.rbxlx FOLDER_PATH_TO_WRITE_TO
(works much better with LuaJIT).If you don’t already have Lua installed on your computer, and don’t know how to compile Lua, grab a pre-compiled file here. Right click on it and press the
extract files
option. Open up the extracted folder and open up the “Bin” folder inside. Next, click on the top bar which displays the directory (without clicking one of the folders) to select the entire directory string and copy it to your clipboard. Then type “path” into the windows search, click “environment variables”. In the window that appears there will be a scroller that has a variable name ofPath
. Click it, then hit the “edit” button. Then hit “new”, and paste in the directory. This is called “adding Lua to your path” if you have never done anything like this before. -
Open up your glorious new RbxRefresh project!
How it works
This project was written for RbxRefresh simply because it is the most flexible on allowing you to sync in Scripts which are parented to Guis/Models/etc. It is also very easy to use. Just open up the project with Visual Studio Code and hit Ctrl+Shift+B (after it is already installed). However, this project can easily be ported to work for other tools or other use cases so I thought I’d share.
RBXport first calls its MakeTree function, which parses the xml data and returns a table full of all the objects in the game parsed with all of their properties as string members. Every object has an array inside it under Object.Children which holds all the children. In essence, it creates a Lua table representation of all the Objects and all of their properties, which is then given to my very simple BuildProject function which recursively iterates through every object’s children and generates an RbxRefresh project from the data. The data could just as easily be used for whatever you want.
Things to note
- Currently, Axes and BinaryString lack an implementation because I don’t know how the data from these should be interpreted. No
Axes
meansArcHandles
Objects will not contain all of the data necessary to recreate them. No BinaryStrings means that Objects will contain no data about what (CollectionService) Tags they have. These don’t really matter for what I was using the project for, but feel free to submit a PR if you understand things I do not.- These placeholder functions take in two parameters:
(Next, Closer)
.Closer
is a string, which in this case would be “/Axes” and “/BinaryString” respectively (not necessary in this case where it can be hardcoded, but helps me reuse functions like SingleLiteral).Next
is a stateful function which advances the XML parser. It returnsValue, Type
, whereType
is “Tag” or “Literal” and Value is a string of whatever the parser is currently on, excluding the signs<>
surrounding signs. This information can also be read here
- These placeholder functions take in two parameters:
-
PhysicalProperties
are in their own table (of the same name) instead of being dumped into the rest of the object’s properties - Right now it only supports Windows but could easily be adjusted for Macs. Submit a PR.