ok... Got it. Here is my total conversion to C++ and implementation of 100% working, easily modded to preference, Player Orbiting Camera And Movement controls.

Very WoW-like camera. hold left mouse = 360 x-axis rotation and -90 to 10 z axis rotation (up n down). right mouse only = pans player AND camera via mouse_force.x.
right and left mouse button = free camera again and moving forward and mouse_force.x controls pan.
w,s = forward,backward
a,d = turn left,turn right
mousewheel scroll = camera zoom distance (increment/decrement camera distance from player)

I think its neato.

Code:
#define WIN32_LEAN_AND_MEAN		
#include <windows.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
#include "adll.h" // Include the engine data types, variables, and functions
#include "mtlFX.h"


//Prototypes
var rad2deg(float radians);
float deg2rad(var degrees);
var abz(var val);
//Globals

ENTITY* terrain1;
ENTITY* playermodel;
ENTITY* skycube;
BMAP* mcursor;
TEXT* tDebug;
PANEL* pDebug;




var abz(var val) {
	var retval;
	if (val >= _VAR(0)) { return val; }
	retval = _VAR(0) - val;
	return retval;
}


float deg2rad(var degrees) {
    float deg2rad = (float)(degrees / 57.29578);
	return deg2rad;
}



var rad2deg(float radians) {
    var rad2deg = _VAR(radians * 57.29578);
	return rad2deg;
}


//Function Definitions

void player_code() {
	ENTITY *my;
	my =(ENTITY *)ev->me;
	ev->player = my; // I'm the player
 	VECTOR* move_vec =_vec(0,0,0);
	VECTOR* temp_vec =_vec(0,0,0);
	var distance_to_ground;

	//Calculate Movement
	move_vec->x = (v(key_w) - v(key_s))* 0.015 * v(time_step); // move player on x axis
	move_vec->y = 0;//(v(key_a) - v(key_d)) * 0.025 *v(time_step); // move player on y axis
	my->pan-= (v(key_d) - v(key_a)) * 0.02 * v(time_step);

	//Read Forces
	if (v(mouse_left)) { 
		my->skill[0] += (v(mouse_force).x * 0.02 * v(time_step));
		my->skill[6] += (v(mouse_force).y * 0.02 * v(time_step));
		if ( my->skill[0] < _VAR(-360) ) { my->skill[0] += _VAR(360); }
		if ( my->skill[0] > _VAR(360) ) { my->skill[0] -= _VAR(360); }
		if ( my->skill[6] <= _VAR(-89) ) { my->skill[6] = _VAR(-90); }
		if ( my->skill[6] >= _VAR(9) ) { my->skill[6] = _VAR(10); }
	} else {
		if (my->skill[0] < _VAR(0)) { my->skill[0]+= 3 * v(time_step); }
		if (my->skill[0] > _VAR(0)) { my->skill[0]-= 3 * v(time_step); }
		if (my->skill[0] > _VAR(-1) && my->skill[0] < _VAR(1) ) { my->skill[0]=0; }
		if (my->skill[6] < _VAR(-61)) { my->skill[6]+= 3 * v(time_step); }
		if (my->skill[6] > _VAR(-59)) { my->skill[6]-= 3 * v(time_step); }
		if (my->skill[6] < _VAR(-61) && my->skill[6] > _VAR(-59) ) { my->skill[6]=-60; }
	}
	if (v(mouse_right)) { 
		my->pan-= v(mouse_force).x * 0.02 * v(time_step); 
		if( v(mouse_left) ){
			move_vec->x = _VAR(2) * 0.015 * v(time_step); // move player on x axis
		}
	}
	my->skill[3] -=v(mickey).z*0.0001;  //Calc Zoom Distance

	//Calculate Z Axis Gravity And Move Player
	vec_set(temp_vec,(VECTOR*)&my->x);
	temp_vec->z -= _VAR(5000); //Set to 5000 below player
	distance_to_ground = c_trace((VECTOR*)&my->x,temp_vec, _VAR(IGNORE_ME | USE_BOX));
	if (distance_to_ground != 0) {
		move_vec->z = -(distance_to_ground - _VAR(25));
		move_vec->z = maxv(_VAR(-35) * v(time_step),move_vec->z);
	}
	c_move(me,move_vec,_vec(0,0,0),GLIDE); // function to actually move player, with GLIDE collision
	
	//Animate As Needed
	if (v(key_w) == OFF && v(key_s) == OFF) {
		if(v(mouse_left) && v(mouse_right)){
  			ent_animate(my, "Walka", my->skill[5], ANM_CYCLE);
  		} else {
  			ent_animate(my, "Standa", my->skill[5], ANM_CYCLE);
  		}
	} else {
		ent_animate(my, "Walka", my->skill[5], ANM_CYCLE);
	}
	my->skill[5] += 6 * v(time_step);	
	my->skill[5] = my->skill[5]%_VAR(100);
	
	//Move The Camera
	if (abz(my->skill[0]) >= _VAR(0) && abz(my->skill[0]) < _VAR(90)) {
		vec_set((VECTOR*)&v(camera).x,vector(my->x -(my->skill[3] * cosv(my->pan + my->skill[0])),my->y -(my->skill[3] * sinv(my->pan + my->skill[0])),my->z+_VAR(my->skill[4])));
	} else if (abz(my->skill[0]) > _VAR(90) && abz(my->skill[0]) < _VAR(180)) {
		vec_set((VECTOR*)&v(camera).x,vector(my->x -(my->skill[3] * -cosv(_VAR(180)-(my->pan + my->skill[0]))),my->y -(my->skill[3] * sinv(_VAR(180)-(my->pan + my->skill[0]))),my->z+_VAR(my->skill[4])));
	} else if (abz(my->skill[0]) > _VAR(180) && abz(my->skill[0]) < _VAR(270)) {
		vec_set((VECTOR*)&v(camera).x,vector(my->x -(my->skill[3] * -cosv(_VAR(180)-(my->pan + my->skill[0]))),my->y -(my->skill[3] * sinv(_VAR(180)-(my->pan + my->skill[0]))),my->z+_VAR(my->skill[4])));
	} else if (abz(my->skill[0]) > _VAR(270) && abz(my->skill[0]) < _VAR(360)) {
		vec_set((VECTOR*)&v(camera).x,vector(my->x -(my->skill[3] * cosv(my->pan + my->skill[0])),my->y -(my->skill[3] * sinv(my->pan + my->skill[0])),my->z+_VAR(my->skill[4])));		
	}
	
	if (my->skill[6] < _VAR(0) && my->skill[6] > _VAR(-90)) {
		v(camera).z=my->z - my->skill[4] * sinv(my->tilt + my->skill[6]);
	} else if (my->skill[6] > _VAR(0) && my->skill[6] < _VAR(90)) {
		v(camera).z=my->z - my->skill[4] * sinv(_VAR(180)-(my->tilt + my->skill[6]));
	} 
	//Keep Eye On Player After Moving
	vec_set(temp_vec,(VECTOR*)&my->x); 
	vec_sub(temp_vec,(VECTOR*)&v(camera).x);
	temp_vec->z+=40;  
	vec_to_angle((ANGLE*)&v(camera).pan,temp_vec);
	
}

//WINMAIN!!!OMFGZ!!!
// application instance handle, // always zero // application command line // window flags
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd) {
	ev = engine_open(NULL);
	if (!ev) return 1;	// acknex.dll not found
		
	//Add Content Folders Paths
	add_folder("terrains");
	add_folder("images");
	add_folder("models");
	add_folder("code");
	level_load("dh.wmb");
	engine_frame();
	
	//Initialize The Graphics Environment
	video_set(_VAR(1280),_VAR(1024),_VAR(32),_VAR(0));
	
	//Setup The Worldscape
	terrain1 = ent_for_name("terrain0x0");
	playermodel = ent_for_name("playermodel");  //These two are placed in the level by wed. This will change. Maybe. I hate wed.
	
	//Ready The Player
	playermodel->x=0;
	playermodel->y=0;
	playermodel->z=_VAR(550);
	//Init player skills
	playermodel->skill[0] = 0; //thetax
	playermodel->skill[1] = 0; //tempforcex
	playermodel->skill[2] = 0; //tempforcey
	playermodel->skill[3] = 180; //Camera Distance
	playermodel->skill[4] = 70; //Camera Height
	playermodel->skill[5] = 0; //Player Animation Percent
	playermodel->skill[6] = -60; //thetay
	playermodel->event=(EVENT)player_code;
	playermodel->emask |= DYNAMIC;
	playermodel->emask |= ENABLE_FRAME;
	
	//Wait for the player to materialize
	while(ev->player == NULL) { engine_frame(); }

	//Move Camera to Player And Look at the fucker
	vec_set((VECTOR*)&v(camera).x,_vec(-180,0,70));
	vec_rotate((VECTOR*)&v(camera).x,(ANGLE*)&v(player).pan);
	vec_add((VECTOR*)&v(camera).x,(VECTOR*)&v(player).x);
	v(camera).pan = v(player).pan;

	//Stall For A Frame (add more if ur compy sux0rz)
	engine_frame();
	
	//Make a Pretty Sky
	skycube = (ENTITY *)ent_createlayer("skycube+6.tga", _VAR(SKY | CUBE | VISIBLE), _VAR(0));

	//Bring Up The Mouse
	mcursor = bmap_create("brokenarrow.pcx");
	ev->mouse_map = mcursor;
	v(mouse_mode)=2;

	//GUI time
	tDebug = txt_create(_VAR(5),_VAR(1));
	tDebug->pos_x = _VAR(200);
	tDebug->pos_y = _VAR(200);
	tDebug->flags |= VISIBLE;
	pDebug = pan_create("digits(0,10,\"TEMPFORCEX: \",*,0,NULL); \
						digits(70,10,4,*,1,player.skill2); \
						digits(0,20,\"TEMPFORCEY: \",*,0,NULL);\
						digits(70,20,4,*,1,player.skill3); \
						digits(140,10,\"THETA X: \",*,0,NULL); \
						digits(230,10,4,*,1,player.skill1); \
						digits(310,10,\"THETA Y: \",*,0,NULL); \
						digits(410,10,4,*,1,player.skill7); \
						digits(140,20,\"Camera Distance: \",*,0,NULL); \
						digits(230,20,4,*,1,player.skill4); \
						digits(140,30,\"Camera Height: \",*,0,NULL); \
						digits(230,30,4,*,1,player.skill5); \
						digits(0,40,\"PLAYER X: \",*,0,NULL);\
						digits(70,40,4,*,1,player.x); \
						digits(0,50,\"PLAYER Y: \",*,0,NULL);\
						digits(70,50,4,*,1,player.y); \
						digits(0,60,\"PLAYER Z: \",*,0,NULL);\
						digits(70,60,4,*,1,player.z); \
						digits(140,40,\"Camera X: \",*,0,NULL);\
						digits(230,40,4,*,1,camera.x); \
						digits(140,50,\"Camera Y: \",*,0,NULL);\
						digits(230,50,4,*,1,camera.y); \
						digits(140,60,\"Camera Z: \",*,0,NULL);\
						digits(230,60,4,*,1,camera.z); \
						digits(140,120,\"AnimPercent: \",*,0,NULL);\
						digits(230,120,4,*,1,player.skill6); \
						digits(0,90,\"MOUSELEFT: \",*,0,NULL);\
						digits(70,90,4,*,1,mouse_left); \
						digits(0,100,\"MOUSERIGHT: \",*,0,NULL);\
						digits(70,100,4,*,1,mouse_right);",_VAR(1));
	pDebug->flags |= VISIBLE;
	pDebug->pos_x = _VAR(600);
	pDebug->pos_y = _VAR(200);

	//Main Loop
	while (engine_frame()) {
		//Main Loop
		v(mouse_pos).x = v(mouse_cursor).x;
		v(mouse_pos).y = v(mouse_cursor).y;
		if (v(key_esc)) { sys_exit(""); }
	}//Main Loop
	engine_close();
	return 0;
}



Your Humble Servant,
Neurosys


See more code and crap @ www.neuroticnetworks.com