Code:
var ph_nForceX = 450000;  // a bit high?
var ph_nForceXn = -25000;
var ph_nForceY = 4000;  
var ph_nForceYn = -6000;
var ph_vForce[3];
STRING lapTx_s = "checker1";

var ct_nMode  = 0;
var ct_nDown = 5;  // * entity height

function phf_force(_nX, _nY, _nZ) {
	ph_vForce.x = _nX;
	ph_vForce.y = _nY;
	ph_vForce.z = _nZ;
}
action boat {
	player = me;
	phent_settype(me, PH_RIGID, PH_BOX);
	ph_setgravity( earth_gravity );
	phent_setmass(my, 70, PH_POLY);
	phent_setfriction(me, 0);		// ERROR??? NO FRICTION?
	phent_setelasticity(my, 25, 1);
	phent_setdamping(my, 90, 90);

	var bLapped; bLapped = 0;
	while(me != NULL) {
		phent_getvelocity(my, velocity3, nullvector);
		velocity = vec_length(velocity3);

		vec_set(temp, nullvector);
		if(key_cuu == 1) {
			//vec_set(temp.x, my);  // ERROR???  // set v to e, temp, my.x
			//vec_normalize(temp, 450000);  // a bit high?
			phf_force(ph_nForceX, 0, 0);
			phent_addforcelocal(me, ph_vForce, nullvector);
			fire();
		}

		if(key_cud == 1) {
			//vec_set(temp.x, my);  // ERROR???  // set v to e, temp, my.x
			phf_force(ph_nForceXn, 0, 0);
			phent_addforcelocal(me, ph_vForce, nullvector);
		}

		if(key_cul == 1 && velocity > 60) {
			phf_force(0, 0, ph_nForceY);
			phent_addtorqueglobal (me, ph_vForce);
			// does angular damping slow it down
		}

		if(key_cur == 1 && velocity > 60) {
			phf_force(0, 0, ph_nForceYn);
			phent_addtorqueglobal (me, ph_vForce);
		}

		vec_set(temp, my.x);
		temp.z -= ((my.max_z - my.min_z) * ct_nDown);
		ct_nMode = IGNORE_ME | SCAN_TEXTURE | IGNORE_PASSABLE;
		c_trace (my.x, temp, ct_nMode);	// just temp, temp.x not needed

		// that won't stop cheating
		if (str_cmpi (tex_name, lapTx_s)) {
			if (bLapped == 0) {
				add_laps();
				error("add_laps()");
			}
			bLapped = 1;
		} else {
			bLapped = 0;
		}

		boat_camera();
		wait(1);
	}
}

Of course, don't bother with that. It's useless.