This will be my attempt at some modding tools mostly revolving around Maya as the main DCC tool. The goal with this set of tools is to (hopefully) beable todo all the editing for a car mod in Maya without having to edit jbeam files. I have it setup as Nodes == locators, Beams == curves. Currently I have some code working that will generate these structures from a mesh. Manual editing would be done by moving, creating, editing locators, connecting, deleting beams to locators, etc.. Color coding would also likely be super useful. As of now I’ve got the basics working and loading into BeamNG. There are issues with getting meshes because maya’s default axis-up but there are some easy workarounds during publishing to fix that. I’ll be updating the source code that can be found on GitHub here: https://github.com/bhowiebkr/jbeam-maya-tools
The jbeam files are super buggy. There are so many edge cases of missing or improper encoding. Devs, why not just use json to validate from the gekko. Than extend it with comments and other extra features to make the jbeam format way easier to parse. It would make creating modding tools much easier. Here is a list of my regular expressions to convert official jbeam files to json, or see testing_convert_regex.py on my repo. total: 1237, converted: 1225, invalid: 12 Code: # single line comments j = re.sub(r'\/\/.*', r'', j) # multiline comments j = re.sub(r'/\*[\s\S]*?\*/', '', j) # Missing comma between brackets j = re.sub(r'(\]|})\s*?(\{|\[)', r'\1,\2', j) # Add expected comma between } or ] and " j = re.sub(r'(}|])\s*"', r'\1,"', j) # Adding expected comma between " and { j = re.sub(r'"{', r'", {', j) j = re.sub(r'"\s+("|\{)', r'",\1', j) # add comma between bool keys j = re.sub(r'(false|true)\s+"', r'\1,"', j) # remove doubled comma's j = re.sub(r',\s*,', r',', j) # add comma between numbers and numbers or [ j = re.sub(r'("[a-zA-Z0-9_]*")\s(\[|[0-9])', r'\1, \2', j) # Add a comma between number and { j = re.sub(r'(\d\.*\d*)\s*{', r'\1, {', j) j = re.sub(r'([0-9]\n)', r'\1,', j) # Remove trailing comma j = re.sub(r',\s*?(]|})', r'\1', j) # single line comments j = re.sub(r'\/\/.*', r'', j) # add comma between numbers with spaces ie: 333 333 = 333, 333 j = re.sub(r'([0-9])\s+([0-9])', r'\1,\2', j) # Add comma between number and " j = re.sub(r'([0-9])\s*("[a-zA-Z0-9_]*")', r'\1, \2', j) # missing comma between "bla""bla" j = re.sub(r'("[a-zA-Z0-9_]*")("[a-zA-Z0-9_]*")', r'\1, \2', j) # missing quotation on value in "bla": "bla j = re.sub( r'("[a-zA-Z0-9_]+"):(\s*"[a-zA-Z0-9_]+:)(\n\s*"[a-zA-Z]+")', r'\1:\2",\n\3', j) Has anyone built a python converter that is 100% successful I can adopt?
I've gotten the invalid jbeam files down to 4. See prior github link total: 1237, converted: 1233, invalid: 4 Code: # broken jbeam files are ['etk800', 'etk800_body_wagon', 'etkc', 'sbr_electric'] These files have the same multi-line error with missing quotation and wrong bracket position. Easier to fix manually for those files. --- Post updated --- All jbeam files successfully convert to json. total: 1237, converted: 1237, invalid: 0 Last bug was due to single line comment matching inside of strings where file paths sometimes are.
Mostly just an exporter, but building the importing functionality is an easy way to figure out how everything should be structured in the scene. I'm hoping that as long as I keep the organization similar to how it came in, I should beable to export it all back out. The basics of loading beams, nodes, meshes now working.