Sweet. I can get models from sketchup to BB now. Proof:
Dude, Megas is awesome.

Chicks dig giant robots.
We dig giant robots.

_________________________________________________
_
RTB, here's an explanation of how the rig works:
Each object has a vertex node with vertices. Each vertex has an influence, which is either a "hidden" influence or a "bone" influence.
Each bone and hidden influence has a node id. Bone and hidden influences are added to an array called "NodeCache" in the location specified by their nodeId. The NodeCache's size is specified by the nodeCount before the start of the node table at the beginning of the MDL0 (although sometimes it is incorrect for models that aren't v9, so it's safer to correct its size by the highest node id of one of the bones).
Hidden influences have weights, and each weight references its own bone so that the vertices move how you want them to.
Bone influences literally make the vertex follow it with a weight of 1.0.
All of the influences, hidden and bone, are stored in the NodeMix.
Type 5 nodes are for bone influences and are 5 bytes long:
1 byte is 0x05 (the type),
2 bytes (an unsigned short) is the node id, and
2 bytes (an unsigned short) is the bone index.
Type 3 nodes are for hidden influences. This type has entries, for each weight it has.
A type 3 node is 4 bytes long, and each entry it has is 6 bytes long.
Type 3 Node:
1 byte is 0x03 (the type),
2 bytes (an unsigned short) is the influence's node id, and
1 byte is the weight (or type 3 node entry) count.
Type 3 Node Entry:
2 bytes (an unsigned short) is the weight's bone's node id, and
4 bytes (a float) is the weight.
0x01 is the terminating byte of NodeMix.
As you read these, you add the hidden or bone influence to the NodeCache in the location specified by the node id.
Once you finish, the NodeCache should be fully populated with hidden or bone influences. We will use this array later to assign the influences to the vertices.
Now when you read the primitives of each object, 0x20 holds the node id that the facepoints will get the influence from.
A 0x20 Matrix is 5 bytes long and is read like this:
1 byte: 0x20
2 bytes (unsigned short): node id
2 bytes (unsigned short): index multiplied by 12 (0x0C)
0x20 matrices can only go up to 9 in count, and then afterwards follows all the facepoints that use one of the 9 node ids in the list above.
When you read the vertex id from the facepoint, you create a new vertex by getting its value from the vertex node assigned to that object at the location of the index and then adding it to a new list of vertices, and then give it an influence by reading the pos/norm matrix id.
The pos/norm matrix id is always the first byte of a facepoint if the object is weighted, and it is an index in the 0x20 matrices that is multiplied by 3.
So, to match up a vertex to its influence, you divide the facepoint's pos/norm matrix id by 3 and then match it with one of the 0x20 matrices' indexes divided by 12. You get the node id of the matched matrix and then retrieve the influence from the NodeCache from the location of the node id.
Sometimes facepoints are repeated (like in triangles) so you need to check the new list of vertices if the vertex exists already, and then edit the index to match that vertex instead. This doesn't matter if you're writing the model though.
That should be it, I think.