Source Filmmaker

Source Filmmaker

Not enough ratings
Using TF2 "empty" models to shortcut animating Portal 2 Piston bones
By Ben24x7
In this guide, I'll explain to you how to use the TF2 model "Empty" to automatically pose the pistons on Personality Core/GLaDOS' models so you don't have to worry about animating them (except for GLaDOS, you still have to animate the Base of her neck pistons, apologies).
A few things before we begin;
First off, you don't have to follow this tutorial unless you really want to, you can get a session with all the pistons "pre-rigged" here;, but if you have the patience, or want to make it yourself, keep reading.

Please do note that I'll be telling you how to do this with a Personality Core, so if you want to do this with GLaDOS, read the stuff in brackets after a certain instruction, e.g. "...personality_sphere1 (glados_animation1)...".
Also, a quick heads up, the instructions for applying this to a Personality Sphere also apply to applying this to the Wheatley-in-GLaDOS-Chasis model, which uses mostly the same bones from both the GLaDOS and Personality Sphere model.

Okay, now we can begin.
Setting up
Start up a new session in SFM, choose a map (in this case, I'm using the iconic 'stage.bsp') and create a "personality_sphere.mdl" or "personality_sphere_skins.mdl" ("glados_animation.mdl" for glados, and "glados_wheatley_newbody.mdl" or "glados_wheatley_boss.mdl" for wheatley in the glados chasis).

Look for "empty.mdl" in 'tf', it should be an invisible model with no visible collision or wireframe, and bring it into your scene. Copy and paste the empty model six times (five times for GLaDOS) and number them from "01" to "06" ("A" to "E" for GLaDOS). Feel free to name them if you wish, I've named them "PS_Pistonparent*number*" in this example.

You should now have something like this;

Now here comes the long and tedious part;
Parenting stuff to stuff (the boring bit)
Open up Personality_sphere1's "Unknown" (GLaDOS' "Unknown") section of bones and open up each of the empty's "Body" section of bones to access their "rootTransform". Now parent the rootTransform of each empty model to their respectively numbered "eyeball_pistons_frontjoint" (or "headPiston_*letter*_tip" for GLaDOS) bone(s) in the personality core model. Once all of them are parented to their respective bones, drag the "Zero" slider for each rootTransform so its position at the same place as the piston's tips.

The empty models should be positioned as so (ignore if you are doing GLaDOS);

If its not showing like above, then try again. If it worked then simply unparent each empty model and now parent the empty's rootTransform to the piston tip's bones. And finally make the "eyeball_eye" bone (or "glados_export_head_tip" for GLaDOS) the parent of each empty model.

Now, when you move the "eyeball_eye" bone, the emptys will follow and, hence, the piston's tips will follow too. Brilliant!
Going one step further...

Create another Empty model and it doesn't matter if you give it a name this time. Parent it to the eyeball_eye bone, Zero it, and parent it's rotation to "eyeball_pistons_backjoint*number*" (you can do this by dragging the rootTransform of the empty onto the bone's "rot", this'll make the rotation of the eye apply to the pistons).

And that should be it! Enjoy your automatically self-positioning pistons.

Please let me know if there are any problems with either this tutorial or with the pistons. If you wish to credit me for this solution, feel free, but to be honest I don't care if you do or not.

Thanks for reading.