Adonis icon indicating copy to clipboard operation
Adonis copied to clipboard

Adonis needs a proper character appearence system

Open ccuser44 opened this issue 8 months ago • 4 comments

What part of Adonis is this related to?

Command

What are you suggesting?

Adonis needs a proper character appearance system

Why?

Currently in Adonis we either use HumanoidDescriptions for changing the character appearance or we change it directly by changing properties or interacting with instances.

Both of these have their downsides but the biggest issue is that the two approaches are mutually exclusive. HumanoidDescriptions will either override all other changes or will refuse to work if something has been changed. Settings things without HumanoidDescriptions on the other hand is very clumsy and requires a lot of boilerplate code which is very prone to breaking, hard to maintain and riddled with bugs. It also is a very future-incompatible way of doing things.

Another thing is that things dealing with character appearences are fundamentally un-future proof as be seen from recent examples. When Roblox changes something which creates some incompatibility with our systems we have to update every affected command as opposed to just updating the main function. Tomorrow Roblox may decide to totally deprecate R6, they may decide to totally remove things like InsertService, they may decide to rename Instances, Enums, IDs etc. A lot of conversion pain would be avoided by just having such a system.

Having such a system would also make a lot of things that are otherwise very hard or impossible to implement without having lots of flag instances and sane code complexity, like an undo system or adding layered clothing support for R6.

Also one big issue either approach, even best case HumanoidDescription usage, is that still quite some boilerplate is required to implement it. You also have to handle R6 and R15 (and potential new character systems) and dealing with things like character:FindFirstChild("Left Leg") or character:FindFirstChild("LeftUpperLeg") isn't exactly ideal (for example why does R6 limbs have a space but R15 do not?).

Certainly some other solution besides HumanoidDescriptions and raw changing needs to exist.

What should be the solution

I stress first and foremost that it should be simple and elegant and get the job done in a good way. It shouldn't just be hastily made. And it doesn't necessarily need any OOP or or complex libraries, it can certainly do without, if it's as simple as one function then that's OK as long as it gets the job done and meets the requirements.

Necessary requirements:

  • Must be able to do everything HumanoidDescriptions can do.
  • Must be able to handle character scaling both for R6 and R15
  • Must be able to handle non-HumanoidDescription appearances for important things like: shirts, pants, t-shirts and faces (be able to work with both raw IDs as well as their respective containers like decals and meshparts)
  • Should preferably work the best with Robloxes own character systems (try not to be incompatible)

It should also be:

  • Easy to use
  • Reasonably fast
  • Not buggy
  • Not bloated (Be careful with this one)
  • Be able to work with different character sizes
  • Abstractions should make the system easier to use not harder

Non-essential but good:

  • Probably should be exposed via the _G API to other game scripts
  • Probably should be able to handle non-HumanoidDescription appearances for non-important things (be able to work with both raw IDs as well as their respective containers like decals and meshparts)
  • Probably should be able to handle
  • Probably be able to undo character appearance changes (and have some elegant system for it) for commands like :poison
  • Probably should be able to be edited or overridden by plugins and other things.
  • Probably should have some character joint positioning for things like :creeper in which the system can easily adjust for character shapes and sizes.
  • Should not expose and/or require using of internal things like character ValueBases generated either by Roblox or Adonis. Things should nearly always be done by abstractions
  • Preferably try to be as much agnostic to character system R6/R15 but if necessary then be able to be non-agnostic.
  • Could integrate other Adonis systems like caps and other things dealing with characters to this too, if they fit nicely that is.
  • Maybe be able to do other interesting character things as well??

Alternatives

Just add this in 2.0

2.0 will probably take a lot of time to release and the issue still exists in 1.0. Also there really isn't much reason not to do this in 1.0, the system doesn't have to be complex.

ccuser44 avatar Nov 11 '23 10:11 ccuser44