FEAT #7 More space junk!

New test scene for filling the bounded "practice area" with satellite models, placed randomly. This will be a good playground for testing out some more involved gameplay mechanics.
FEAT #10 Dude got arms

Astronaut now has two arms, dynamic bodies with revolute joints to the shoulder. First attempt produced bizarre phantom rotational forces, which I finally diagnosed as the arms colliding (overlapping, really) with the EVA pack. I knew they wouldn't interfere with the astronaut's body, but the EVA pack is a separate physics object. So both arms, the body, and the EVA are all now part of collision group index -1. Negatives never collide with each other, positives always do, regardless of other category and mask settings. I think there are only 16 groups available (-8..8). For this game that's unlikely to pose a problem, but it's good to note that for more complex interactions, we may need to juggle those groups on the fly.
FEAT #12 Grapples on to debris, but can't let go!

Friction joint was actually pretty simple to implement, but maybe that was just thanks to recent experience doing revolute joints for the shoulders. Funny thing about friction joints is that the max force and torque settings only apply to slippage; they don't have any awareness of when the joint should outright break. So, the astronaut will slip and slide quite nicely until he is three meters away from the object he's "holding on to" and still has a firm joint applied. Obviously, that's the next thing to tackle.
FEAT #10 Catch and release

Astronaut now has a grasping property and a letGo() method. The contact listener will only create a new friction joint at the astronaut's hand if astronaut.grasping is true. The letGo() method removes friction joints from both hands, if any, and toggles grasping off for one second. Additionally, if the distance between the friction joint anchor points exceeds 15cm, the joint is destroyed. The astronaut.grasping property is unchanged in such an involuntary situation, so the astronaut may be able to slide or rotate to gain a new grip, or even grab a different object.