--[[
	Roblox avatars are a nightmare to physically simulate, either because of innate clipping
	or because package hitboxes are insane. Don't believe me?
	
	- https://i.imgur.com/471ffsb.png (bundle id=475)
	- https://i.imgur.com/fRpkSdS.png (bundle id=429)
	- https://i.imgur.com/k07QVWR.png (bundle id=162)
	- https://i.imgur.com/F2lo4Te.jpg (bundle id=168)
	- https://i.imgur.com/je4GEas.png (bundle id=475)
	- https://i.imgur.com/0oUu1ra.png (bundle id=192)
	
	So we have to disable collisions between a bunch of parts to get them to simulate without
	spazzing out due to overconstraints.
	
	We don't want to disable all collision, as that would result in ugly things like the
	legs phasing through each other, or a hand phasing through a leg. Specifically looking
	at Roblox bundles, the torso clipping is by far the worst (e.g. Deathspeaker UpperTorso
	clips with EVERY OTHER BODY PART), with next up being nearby ballsocketish joints (e.g.
	a shoulder and the head, or the two upper legs). We can't just hardcode limb names
	and get it over with though (Humanoids are already bad enough at this...) if we want
	ragdolls to work with arbitrary characters, so my solution was:
	
	"Parent" limbs (e.g. torso is a parent to the head, arms, and legs) should not collide
	with their children. This solves the torso problem in a generic way that should work with
	most characters.
	
	Limb "roots" (e.g. shoulder, head, hips) can't collide with each other. Again, this solves
	the problems we had with Roblox bundles while still working with arbitrary characters
	
	Maybe this approach won't work for 100% of characters, but hopefully it should work in
	most cases.
--]]


local getLastWordFromPascaleCase = require(script.Parent:WaitForChild("getLastWordFromPascalCase"))
