hy do the weights have a position? And why is the vertex position derived from that?
This is md5 specific, md5 does not store the vertex positions themselfs.
The vertex positions need to be calculated from the weights.
I've never parsed MD5 meshes myself, maybe this link is helpful to you:
Wouldn't it make more sense (and take up less data) if a weight was just a float and a joint id?
Since a vertex can have multiple joints affecting it you'll have multiple weights for each _vertex_.
Checkout the sturcture in the linked gpu gems article, not about morph target but about gpu vertex skinning.
The format just seems backwards....