Remove the "depth_check on" and "depth_write off" lines from the coding.
The depth_check attribute is already on by default, so there's no need to reiterate it. The main culprit is the depth_write attribute, which you have set to off. By default, it is on and should stay on unless you are rendering static backgrounds.
If depth writing is off, pixels are written to the frame without updating the depth buffer. The problem is that this means the depth checking function becomes useless, even if set to on, because the depth buffer is not updated.
The depth check is basically what allows objects rendered behind other solid objects to be hidden by them. If depth checking is off, pixels are written no matter what has been rendered before. In your case, the "depth_write off" was interfering with the depth checking and causing the body parts behind other solid body parts to show up. If you look at the tail in your .GIF, it's doing the same thing, despite the fact that you don't have a texture on it.