It might also be worth pointing out that it's not rocket science to make a skeletal animation system in pure GML, I did it for
one of my asset packs... You just need to store an array of angles for each bone for each keyframe and smoothly interpolate between them. The positions are directly related to the angle of the parent bone. You can compute how the bones are attached to each other using lengthdir_x / y using their current angle and their length, the trickiest bit is to figure out the order they're dependent on each other. (In my system, this is done using a hardcoded routine, but you could get fancy and do this dynamically). Also, it's important to draw the bones from the bottommost to the topmost (this order is different from the angle/position dependency). For instance, the arm the closest to the camera should be drawn on top of the body. For this, I just used a "draw order" array - this approach lets you reorder body parts on the fly when a character turns around (swapping the left and right arms).
You might ask yourself why you'd want to do all this work... well, not having to pay for a Spine license is one thing, but secondly you have much more control over the sprites drawn for each bone this way. For instance, all the bones making up the skeleton enemy in the SoulsVania Engine scatters when they're killed. You can also draw any sprite for any bone in the animation skeleton, so you can mix and match freely (instead of having to bake all variations into the same texture for a spine animation). Instead of having multiple pre-colored versions of an armor set or skin tone, you could use
image_blend to recolor each limb individually (I do that for the skin color selection in my engine). You could even run separate shaders on some bones! (If you like breaking texture batches and slowing down the game...
)