NOTE : Underscores
 
Some of the functions are given as two versions, those with a leading underscore and those
without. Those with the underscore are actual functions. Those without are macros #defined
in q_shared.h. I believe that the #defined versions are more efficient (may be no difference, 
depends on compiler?). In general you should use the versions without the underscore.
 
NOTE : Format of Quake2 variables
 
vector - represented by type vec3_t, basically an array of floats, with :
 
vector[0] = x coordinate
vector[1] = y coordinate
vector[2] = z coordinate
 
angles - also represented by type vec3_t, this time with:
 
angles[0] = pitch (up and down)
angles[1] = yaw (turn left and right)
angles[2] = roll (tilt left and right, not really used)
 
angle - represented by a float
 
Angles
 
anglemod (angle)
 
returns the equivalent of angle between 0 and 360 degrees
 
LerpAngle (angle1, angle2, fraction)
 
returns the angle resulting from turning fraction * angle from angle1 to angle2
(and if you can't make sense of that, don't worry, this isn't actually used anywhere)
 
Bounding Box
 
AddPointToBounds (point, mins, maxs)
 
if the point is outside the box defined by mins and maxs, expand the box to accomodate it.
sets mins and maxs to their new values
 
ClearBounds (mins, maxs)
 
sets mins and maxs to starting points before using AddPointToBounds
 
Floats
 
Q_fabs (number)
 
if the number is  < 0, returns -1 * number, otherwise returns the number
 
Q_log2 (number)
 
returns the log to base 2 of the number
 
Info strings
 
Info_RemoveKey (string, key)
 
searches through string for key, then removes it
 
Info_SetValueForKey (string, key, value)
 
adds a new entry 'key' into string with value 'value'. removes any old versions of key.
NOTE : value should be a string
 
Info_ValueForKey (string, key)
 
searches through string for key, then retunrs the value associated with key
 
Strings
 
Q_strcasecmp (string1, string2)
 
compares string1 and string2, returning 0 if they are the same
NOTE : ignores case
 
Q_stricmp (string1, string2)
 
compares the two strings, returning 0 if they are identical
NOTE : case must be identical
 
Q_strncasecmp (string1, string2, number)
 
compares the first 'number' letters in string1 and string2, returning 0 if they are the same
NOTE : ignores case
 
Vectors
 
AngleVectors (angles, forward_vector, right_vector, up_vector)
 
Converts the angles into various vectors :
 
forward_vector : vector along angles
right_vector : vector 90 degrees to the right of forward_vector
up_vector : vector 90 up from forward_vector
 
CrossProduct (vector1, vector2, vector_out)
 
sets vector_out to the cross product of vector1 and vector2
 
NOTE on cross product :
This gives a vector perpendicular to vector1 and vector2, of length : 
'length vector1' * 'length vector2' * sin (angle from vector1 to vector2) 
If you want to know how it's calculated, look at the code in q_shared.c
 
DotProduct (vector1, vector2), _DotProduct (vector1, vector2)
 
gives the dot product of vector1 and vector2
 
NOTE on dot product : 
This is calculated by vector1[0]*vector2[0] + vector1[1]*vector2[1] + vector1[2] * vector2[2]
It is also equal to 'length of vector1' * 'length of vector2' * cos (angle between vectors)
 
vectoangles (vector, angles)
 
Sets the angles array to point in the same direction as the vector
 
VectorAdd (vector1,vector2,vector_out), _VectorAdd (vector1,vector2,vector_out)
 
adds vector1 to vector2 and puts the result in vector_out
 
VectorClear (vector)
 
sets the vector to <0,0,0>
 
VectorCompare (vector1, vector2)
 
returns 1 if the vectors are the same and 0 otherwise
 
VectorCopy (vector_in,vector_out), _VectorCopy (vector_in,vector_out)
 
copies vector_in to vector_out
 
VectorInverse (vector)
 
sets vector to -1 * vector
 
VectorLength (vector)
 
returns the length of the vector
 
VectorMA (vector1, scale, vector2, vector_out)
 
sets vector_out to :   vector1 + scale * vector2
 
VectorNegate (vector_in, vector_out)
 
sets vector_out to  -1 * vector_in
 
VectorNormalize (vector)
 
returns a vector in the same direction as the given vector, but only one unit long
 
VectorNormalize2 (vector_in, vector_out)
 
sets vector_out to the normalised version of vector_in. returns the length of vector_in
 
VectorScale (vector_in, scale, vector_out)
 
sets vector_out to scale * vector_in
 
VectorSet (vector, x, y, z)
 
sets the x coordinate of vector to x, the y coordinate to y, etc.
 
VectorSubtract (vector1,vector2,vector_out), _VectorSubtract (vector1,vector2,vector_out)
 
subtracts vector2 from vector1 and puts the result in vector_out
 
vectoyaw (vector)
 
Returns the yaw component of the angles vector
 
vtos (vector)
 
converts a vector into a string
 
Returns the string