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.
Code:
  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);
  }



"There is no fate but what WE make." - CEO Cyberdyne Systems Corp.
A8.30.5 Commercial