I was looking at the problem all wrong anyway.
Im not going to be able to help much cause its the C++ side that has the problem.
You are getting a null pointer error because the SOLDIER entity is never getting
filled by an entity, you'll need another function to perform an ent_create()
to create the entity and assign it to the soldier pointer, BEFORE calling the
FPS_camera function.
I would also suggest the changing the end of FPR_camera to the following,
otherwise you'll get a crash if the soldier pointer is empty for too long.
if(soldier)
{
c_move(soldier, (VECTOR*)&vMove, NULL, GLIDE); // entity, relative dist, global dist, mode
v(camera).x = soldier->x;
v(camera).y = soldier->y;
v(camera).z = _VAR(70);
}