CharacterAdded is fired and then afterwards, Roblox decides where to place the character, disregarding any placement that has already been decided by the developer. Here’s a simple script that won’t have the results you would expect
The easy solution to this is to have LoadCharacter include a position parameter and then we can practically use CharacterAutoLoads to create a real custom spawn system rather than relying on idiosyncrasies to bypass these sorts of behaviours.
I would argue for CreateCharacter over a position argument – that way we still have full control over position, but can also prepare the character (with armor, weapons, etc) before spawning them into the world.