Character with ballsocket tail boosts forwards when it jumps

Reproduction Steps

When this particular character setup jumps, it will be unnaturally boosted forwards in a slightly uncontrollable direction.

  • Open the repro file.
  • Start play solo.
  • Jump while standing still on a flat surface, observe the character boost forwards when the tip of the tail is left on the ground.

Ballsocket snake bug.rbxl (44,2 KB)

Expected Behavior

The character should jump upwards only, causing the tail attached to the humanoid root part to follow physically. The character should not be moved significantly in any other direction.

I have various characters with ballsocket tails that work fine. Only this one (the red snake/bug) misbehaves like this. I cannot figure out why.

Actual Behavior

The character will boost forwards unnaturally when the tip of the tail touches the ground.

  • Shortening the tail does not help except to make it less likely that the tip of the tail will touch the ground.
  • Adjusting the material properties does not help as far as I’ve seen.
  • Adjusting the root priority of the rootpart does not help.
  • Toggling various properties related to physical behavior does not seem to help.

Workaround

There is NO workaround for this that I’ve found. This is blocking me from releasing a new character in my game.

Issue Area: Engine
Issue Type: Other
Impact: High
Frequency: Constantly
Date First Experienced: 2022-08-01 00:08:00 (-05:00)

5 Likes

This has been an issue for years and also happens when you have an unanchored assembly parented to your character model.

Thanks for the report! We’ll investigate.

3 Likes

Was there any traction on this? This is still blocking this piece of new content in my game, I have had no luck in finding a workaround.

1 Like

The physics team looked at the forces generated by jumping with the tail still touching the ground. These forces are the result of how jumping works and the complex mechanism that the long tail characters make up. This expected behavior for the physics system, adding additional constraints that restraint movement could help eliminate the unwanted behavior.

1 Like

Thanks for the explanation. Do you think you could elaborate on what sort of constraints could be used to control this unwanted behavior, and how? It’s not immediately clear to me. :pray: Hoping you don’t you mean preventing the ballsocket constraints from allowing the tail to droop, as that’s quite undesirable.

1 Like

There is no combination of constraints that will mitigate this behavior. Humanoids need to expose more properties to let us control bizarre behavior like this. I will need to reimplement jumping myself by platformstanding the humanoid and manually applying an impulse to the rootpart. This is awful.


Actually, I don’t like it, but this localscript appears to have ““solved”” the problem. Every time I try to do literally anything with Humanoids, I have to build a glass castle out of hacks. This is terrible to do and breaks so many assumptions. I have to proxy these parts with ObjectValues just so I can do character operations, and I have to add special cases for them absolutely everywhere.

Please just make humanoids predictable and configurable.

local tailModel = Instance.new("Model")

local partNames = {
	"Tail1",
	"Tail2",
	"Tail3",
	"Tail4",
	"Tail5",
	"Tail6",
	"Tail7",
	"Tail8",
	"Tail9",
}

for _,partName in pairs(partNames) do
	script.Parent:WaitForChild(partName).Parent = tailModel
end

tailModel.Parent = workspace.CurrentCamera -- YOLO

This issue also occurs in the case when an unconstrained unanchored assembly is parented to the humanoid model. Why is this intended behavior exactly?

Also, this problem does not appear to happen in the new physics controller. Is that intended behavior?

Given this combination of system (plant) and current humanoid controller the current behavior is correct for this combination. Meaning the solver is solving the dynamics correctly and the controller is doing what it can, which is unfortunately undesirable.

The new physics character will allow humanoids to be more configurable, which should allow one to obtain the desired results more easily.