As a Roblox developer, it is currently too hard for me to use the built-in tool objects. While they certainly have advantages, the many disadvantages heavily outweigh the advantages for me, so I choose instead to make my own custom systems to handle tools. While most of these problems have solutions that can be implemented by the developer, increasing the ease of use of tools will lower the bar of entry for more complex equipment for characters and also save developers time. In this suggestion, I’m going to highlight these (dis)advantages and propose changes to address them.
Advantages of tools
-
1. Automatic handling of network replication
One of the reasons that tools are convenient is that they automatically handle replication across the network. Developers don’t need to worry about making sure that states are properly replicated because the tool and the engine handles it all behind the scenes. -
2. Automatic welding of the handle to the hand
Another reason that tools are so convenient is they automatically set up the welds necessary to hold the tool in place. However this is only partially advantageous, as I will cover later
Disadvantages of tools
I am going to outline all of the problems that I have with tools and then propose solutions that will hopefully address all of these problems.
-
Lack of control over the equipped state of the tool
Currently, there isn’t any way to reliably control whether or not a tool is equipped through scripts. While I can automatically equip a tool through a script, it’s hard to control whether or not a player can unequip that tool. This lack of explicit control is one of the main reasons I choose not to use tools, as there is no good way to keep a player from unequiping a tool -
Archaic and awkward methods to adjust grips
There are three problems I have with the way tools are connected to characters, that I am going to outline in these next three bullet points and then provide one solution to solve all of them. The first of these problems is the archaic way that a tool’s CFrame works. Having to input all 3 rotation axes and offset into separate properties is an incredibly old, legacy method of setting a tool’s grip and I am honestly astounded it hasn’t been improved in the 9-10 years since tools have been introduced. -
Lack of control over the welds/connections the tool creates
The second problem I have with tools’ connections is the inability to choose on what part of a character a tool connects to as well as the inability to have more than one automatic connection. If we want tools to be truly robust, we need to be able to connect 1, 2, 5, 10, handles to different parts of a character as we choose fit. Having this functionality would vastly increase the ease of use in tools and would make it so that we don’t have to use scripts in our tools to handle welding of parts to the character. -
Inability to animate handles connected to the character
The third and final problem I have with tools is that they create welds instead of Motor6D’s. This is another large reason I choose to make my own custom tool systems rather than using roblox tools. I frequently use animation to enhance the appearance of equipment in my games and having built in features to conveniently handle the setting up of welds would be a huge time saver for me.
Addressing these problems
In order to solve these four problems that make using tools difficult, I’m going to propose two changes, one small change that will address the first problem, and one large change to address the other three. Firstly, in order to give developers more control over the equipped state of tools, it would be nice if we could have a property that would allow us to toggle whether or not a player can manually equip and unequip a tool. Additionally, it would be nice to have explicit methods to equip and unequip a tool to a humanoid, though this isn’t completely necessary. While this change is small and simple, the second change would be a lot more involved. For this change, I propose that the entire system of setting the tool’s grip properties and handles be completely phased out. Instead, I think we should use a system that attaches parts in the tool to the character similar to the way that the :AddAccessory() method of humanoid works; developers could put as many handles as they wanted into a tool and simply need to specify through attachments how the tool would connect to the character. These attachments would automatically be interpreted and turned into Motor6D’s that attach the handle to the character.
And in order to have full animation support, we’d need to be able to use another attachment to specify where the ‘pivot’ (point where the C0 and C1 meet) of the joint would be.
anyways thats everything i dont know how to end this smoothly. please implement this because i hate doing welds and also tool replication between clients. thanks and love you