Setting the groundwork for an animation system required a fundamental rethinking of the render algorithm, since movement includes floating point change in points in 3D space, I couldn't get away with the regular layer sorting I was doing already. This time I push all things into an array then run a qsort() alogirthm that orders thing in floating point percision in 3D space (this also made this all possible with one draw call), this allowed the sprite to transition behind and in front of objects without weird clipping and order bugs. (I need to actually make the animation gifs now)