Eigentlich relativ simpel:

vec_set(camera.x,vector(-100,-20,5)); // spiele mit diesen Werten
vec_rotate(camera.x,camera.pan);
vec_add(camera.x,player.x);
vec_set(player.pan,camera.pan);

Das ist bloße Trigonometrie; Erklären kann ich's leider nicht. grin
Das mit der Kopf- / Armbewegung beinhaltet aber Bones-Rotationen und ist schon etwas komplizierter.
Dazu kommt dann natürlich noch die Kameradrehung selbst, aber ich glaube, das bedarf keiner Erklärung.