Quick answer: Pygame.transform.rotate on a multi-frame sprite cropping the rotated result? Rotation expands bounds; clip the result to fit a known box.
Sprite 32x32; rotated 45 deg; result is 46x46; renders at 32x32 destination crops.
Use rotate_and_crop
Helper that rotates and crops to original bounds. Loses corners but stays consistent.
Or expand destination
Destination rect grows with rotation. No crop; offset adjusted to keep center.
Pre-render per angle
Discrete rotation steps; pre-render each. No runtime rotation cost.
“Rotation changes bounds. The output isn't the same size.”
If you rotate frequently, pre-rendering is usually the right answer. Trade memory for predictable rendering.