Backporting F3X to 2012 (and below...ish)

Backporting F3X to 2012 (and below...ish)

For the past month or so I have been tinkering with the older versions of F3X from ~November 2013 to see if they use anything too new that'd make it impossible to use in older versions. Surprisingly enough, not much. That doesn't mean I didn't have to make any compromises however.

If you are just here for the downloads, you can skip all the way to the bottom, no hard feelings.

Initial efforts

First going into this project, I thought it would be infinitely more complex like anything else I do. This time that wasn't the case surprisingly enough, it was more time consuming then complicated. I planned to backport to 2010 originally but 2012 was an infinitely more feasible option for reasons I will go into later.

First thing I had to compromise was exporting functionality unfortunately, the export function utilized an HTTPService request to some web server, which is impossible to do in old Roblox as it was only added in 2013. I could have modified my client to lower the permission of the httpGet and httpPost methods that were reserved for Roblox specific requests, but I do not want to have to ask everyone who wants to use this to do that. Sorry!

Next thing I found out when I was working with 2010 originally was that it was impossible to style the buttons properly, the engine forces every button to use this ugly color palette even when I tell it not to, horrendous!

As you can also see in this picture, the fonts are all forced to standard Arial, no clipping for tool tips, and having to deal with it being impossible to disable dropping the tool which broke everything, I decided to dip 2010 support entirely. It did generally work besides those key issues but it wasn't up to my satisfaction, especially after testing this with a couple people and people accidentally dropping it, having to rejoin to even use it again.

2 years later...

Chronologically speaking in terms of the client version, not literally of course! With Roblox introducing a Lua based user interface came with more control for user GUIs in the process, great! There's still some work to do though.

One of the issues that consumed the majority of my time was fixing text inputs, what do I mean by that? Basically F3X decided it was a better choice to layer a button on top of text inputs and use those to capture focus instead of just... using Roblox's built in functionality for that?

I had to remove these for every single text input, throughout every tool.

:CaptureFocus() did exist in 2012, but it was locked under the permissions of Roblox's Lua interface, so we can't use that. I decided to remove this bit of code along with the buttons in question, and it works just fine with Roblox's default focusing logic. I am still confused why it was even decided to do it any other way?

0:00
/0:10

After a few days, I finally finished it and all I needed was to add the finishing touches. I started with disabling some buttons that obviously won't be supported, such as the tool for dynamic lights and the exporting functionality as mentioned earlier. Given there was no disabled state icon for the light tool, I decided to just simply put the lighting icon and bind text behind the translucent black layer so it looked grayed out by lowering the ZIndex from 1 to 0.

The art of deception.

I also made it impossible to even open, let alone see the tool tip for the lighting tool to communicate it doesn't work. Speaking of tool tips, those were a pain to get looking right as well! I had to manually readjust all sorts of hard coded offsets for the text which didn't render well with god knows what changes.

The text did clip too, ClipDescendants was ignored for some reason.

Some more fine tuning and cheeky attribution later and we are done! Let's take it for a drive! (Pun intended)

After testing it out a bit building some simple things like in the screenshot above, I decided to do a multiplayer test hosted by my friend tobu.fi, thanks for being willing to help out!

I learned a thing or two from this backporting journey. Sometimes things are not always as hard as they seem, you just have to do it. Also don't start a project right as you are going on vacation, you'll be thinking about it the whole time.

Thanks for reading, even if you skimmed. I appreciate any sort of traffic I get on these posts and the niche knowledge people gain from them. I look forward to see what people can build with these, imagine the possibilities with an actual usable rotation tool!

Download