February 2018: From Metamodding to OpenGL shaders
Written by DirtPiper, 2/16/2018
The 07 client has been public for some time now, and there has been a corresponding “classlist.txt” alongside it to simplify the use of the insert basic object box, but there were a few classes that could not be inserted.
This, of course, was due to the fact that these classes lacked documentation in the ReflectionMetadata - the list of classes that the roblox client uses to keep track of things like the class’s icon, their description in the object browser, what order to display different classes in the explorer, etc.
To put things simply, I spent roughly a single afternoon modding the 2007 client’s reflectionmetadata until I managed to get most classes insertable or viewable in studio, which led to a few interesting discoveries. I also did this same treatment to the 08 client, at which point I found out about the first of these discoveries: LocalBackpackItems.
Used internally by roblox to handle the UI for the player’s backpack, LocalBackpackItems can be used to create simple HUDs, like an FPS counter or a position indicator. They come with two caveats though, in that clicking on them when they are placed in a child of guiroot will crash the game, and trying to select a tool while there are LocalBackpackItems in the player’s relativepanel will also crash the game.
The next discovery was the nature of StockSounds - up until their removal in 2014 or so, StockSounds were invisible to the explorer and were only accessible through scripts. The soundscape by default contains a slew of them, each one set to make a different noise - these stocksounds are used by the roblox studio to handle the sounds that are played when deleting an instance, scrolling the camera, using the fill tool, etc.
After the hype of hidden classes had died down, andreja6 made known to me a certain quirk of the “Texture” property of tools/hopperbins:
When the texture of a tool/hopperbin is set to a file that shares it’s location with other files with the same name but “_dn”, “_ds”, or “_ovr” appended to them, then those textures will automatically be used whenever the tool/hopperbin is clicked on, disabled, or being moused over, respectively.
Then, I started working on a project, using images with this feature found in the 07 client, to make a rough reconstruction of 2005-era minigame tools, as can bee seen here:
The next and potentially most amazing thing to be found occurred just last night: the discovery of OpenGL shaders in the 07 client.
MusicalProgrammer, using cheatengine and hex editing, found unused code in the 07 client that was used in 06 to render a bloom effect on bright areas of the screen - something that we had presumed to be photoshopped whenever we saw it in images of 06 clients. About an hour later, he found another shader for a depth of field effect, also seen in 06 era screenshots. Zeuxcg himself had previously stated that such shaders were impossible in this era of OpenGL.
If you want to find out more about these discoveries and perhaps even use them yourself, feel free to check out the clientsearch discord - the link can be found in the “contact” tab of this blog.