Hello. I’m trying to make a game that uses Roblox’s old physics. (From around 2010. Not jumping and walking animation, the old physics) I can’t figure out how, and I couldn’t find anything about this anywhere else. I’m not sure if it’s possible, but if it is, I can’t figure it out. Thanks for reading!
The legacy solver was depreciated and removed last year. If you have a usecase or some physical object that requires the use the legacy solver, I suggest making a thread explaining what you are trying to accomplish.
Just a side note, that thread has been closed 23 days ago.
As Ancient_Orange said, that was closed a while ago. I looked through it, and I couldn’t find anything simular to what I am trying to do.
Sorry for the necrobumping, I’ve been wondering about this for a long time too, but during the experiment I managed to find out something similar.
Recently, they added the Character Controller Library, and as I found out, it’s currently quite unstable, which is a bit reminiscent of the old Spring physics solver.
Once you have this enabled (Avatar → Settings → Character Controller Library), let’s set up some controllers in the manager of the character. Add LocalScript to StarterCharacterScripts:
local character = script.Parent
local controllerManager: ControllerManager = character:WaitForChild('ControllerManager')
local airController: AirController = controllerManager:WaitForChild('AirController')
local climbController: ClimbController = controllerManager:WaitForChild('ClimbController')
local groundController: GroundController = controllerManager:WaitForChild('GroundController')
airController.BalanceMaxTorque = 1000
airController.BalanceSpeed = 10
airController.MaintainLinearMomentum = false
climbController.BalanceMaxTorque = 500
climbController.BalanceSpeed = 5
groundController.BalanceMaxTorque = 2500
task.wait()
script:Destroy()
You may need to adjust some values to get the wobble you want. I also made a little code that allows you to go a little underground when jumping or falling from a height. (LocalScript, StarterCharacterScripts)
local character = script.Parent
local rootPart: BasePart = character:WaitForChild('HumanoidRootPart')
local humanoid: Humanoid = character:WaitForChild('Humanoid')
local groundController: GroundController = character:WaitForChild('ControllerManager'):WaitForChild('GroundController')
local updateConnection
local function Fall()
if (not rootPart.Parent or not humanoid.Parent or humanoid.Health <= 0) and updateConnection and updateConnection.Connected then
updateConnection:Disconnect()
script:Destroy()
return
end
local yVelocity = math.abs(rootPart.AssemblyLinearVelocity.Y)
groundController.GroundOffset = yVelocity > 8 and math.clamp(yVelocity/33.333,1.5,2) or 2
end
updateConnection = game:GetService('RunService').RenderStepped:Connect(Fall)
For more complex physics implementations, you can use Mover constraints without moving away from the hard-coded Engine “black box” of the Humanoid at all. I consider this approach more rational, since in the future the instability of the new system will be fixed.
I hope this helped you a little. Goodluck!