====================================
Crosshair Stats Display System (CHS)
====================================
Display system that can be configured by the user to output various pieces of information, such as speed, health, timers, distances, etc.

The CHS is comprised of 3 crosshair stat sets.  One absolute center set (display is inside the crosshair), and two user sets. The 2 user sets each have 8 assignable information slots, giving a total of 16 info slots.

-------------------
Center Set (set 0):
-------------------
The center set is used to display user control input inside the crosshair.  Any demos recorded using this pk3 will be able to display the user control input information, even if the demo itself was not displaying this information during the recording process.  Useful mostly as a training tool, to see how a particular trick was accomplished from an input point of view.

config vars (for CHS set 0):
---------------------------
 /df_chs0_Draw [ default: 0 (off), range: 0 to 3 ] - turns display on/off
	0 = off
	1 = always on
	2 = on for demos only
	3 = on for non-demos only (off for demos)

 /df_chs0_FontColor	   [ default: 0 (white), range: 0 to 9 ] - changes font color
 /df_chs0_FontTransparency [ default: 1 (no transparency), range: 0 to 1 (.xx) ] - changes font transparency

--------------------------------
User Sets (CHS set 1 and 2):
--------------------------------
The user sets are capable of displaying a lot of different types of information.  They are also very configurable from a display point of view. It is possible to have one set be displayed around the crosshair, and have the other set displayed elsewhere on the screen, in more of a vertical list of stats.  In addition, the user sets are highly configurable in regards to the font, the size, the position, the display type, etc.

config vars (for CHS set 1):
----------------------------
Note that set 1 and set 2 are essentially identical in their configuration (with the exception of some of the default values), but each set has it's own group of config vars.

df_chs1_Draw
df_chs1_FontSize, df_chs1_FontColor, df_chs1_FontTransparency, df_chs1_FontShadow
df_chs1_LabelColor, df_chs1_LabelType
df_chs1_DisplayType
df_chs1_OffsetX, df_chs1_OffsetY 


 /df_chs1_Draw [ default: 0 (off), range: 0 to 3 ] - turns display on/off
	0 = off
	1 = always on
	2 = on for demos only
	3 = on for non-demos only (off for demos)

(font vars (effects entire CHS set))
 /df_chs1_FontSize	   [ default: 7, range: 4 to 15 ] - changes font size
 /df_chs1_FontColor	   [ default: 0 (white), range: 0 to 9 ] - changes font color (for data)
 /df_chs1_FontTransparency [ default: 1 (no transparency), range: 0 to 1 (.xx) ] - changes font transparency
 /df_chs1_FontShadow	   [ default: 1 (on), range: 0 to 1 ] - toggles font shadows
 /df_chs1_LabelColor	   [ default: 0 (white), range: 0 to 9 ] - changes font color (for label)

(display vars (effects entire CHS set))
 /df_chs1_OffsetX [ default: 0*, range: -320 to 320 ] - changes the horizontal position of the CHS set relative to the center of the screen
 /df_chs1_OffsetY [ default: 0*, range: -240 to 240 ] - changes the vertical position of the CHS set relative to the center of the screen
 /df_chs1_DisplayType [ default: 0* (crosshair style), range: 0 to 4 ] - changes the display type of the CHS set
	0 = crosshair
	1 = 1 column, left aligned
	2 = 1 column, center aligned
	3 = 1 column, right aligned
	4 = 2 column, split

* use DisplayType along with LabelType to create a display/label set to your liking

 /df_chs1_LabelType [ default: 0 (off), range: 0 to 4 ] - changes the lable type of the CHS set
	0 = off (no label displayed)
	1 = left (label appears to the left of the data)
	2 = center (style 1) (use with displaytype 4)
	3 = center (style 2) (use with displaytype 4)
	4 = right (label appears to the right of the data)

* use DisplayType along with LabelType to create a display/label set to your liking

each CHS set has 8 positions (slots) available for information.
 /df_chs1_Info1 [ default: 0 (empty), range: 0 to 71 ] - assigns an information type to the stat info slot1
 /df_chs1_Info2 [ default: 0 (empty), range: 0 to 71 ] - assigns an information type to the stat info slot2
 /df_chs1_Info3 [ default: 0 (empty), range: 0 to 71 ] - assigns an information type to the stat info slot3
 /df_chs1_Info4 [ default: 0 (empty), range: 0 to 71 ] - assigns an information type to the stat info slot4
 /df_chs1_Info5 [ default: 0 (empty), range: 0 to 71 ] - assigns an information type to the stat info slot5
 /df_chs1_Info6 [ default: 0 (empty), range: 0 to 71 ] - assigns an information type to the stat info slot6
 /df_chs1_Info7 [ default: 0 (empty), range: 0 to 71 ] - assigns an information type to the stat info slot7
 /df_chs1_Info8 [ default: 0 (empty), range: 0 to 71 ] - assigns an information type to the stat info slot8

example 1: /df_chs1_info4 1	(assigns "CH_INFO_SPEED" to CHS set 1, position 4)
example 2: /df_chs2_info1 54	(assigns "CH_INFO_OVERBOUNCE_ALL" to CHS set 2, position 1)

see list below for info values

config vars (for CHS set 2):
----------------------------
config vars for CHS set 2 are identical to CHS set 1, but are referenced as:
 /df_chs2_*

floating point display:
-----------------------
Many of the information types allow display of information after the decimal place (.xxx).  The default is that no information is display after the decimal place.  Display of data after . is accomplished when and information type is assigned to an info slot.  Essentially, use x000, and the value for x will be the number of decimals display after the decimal place.

example 1: /df_chs1_info1 23	// displays horizontal speed as: x	(   23/1000 = 0 decimals )
example 2: /df_chs1_info1 1023	// displays horizontal speed as: x.x	( 1023/1000 = 1 decimal  )
example 3: /df_chs1_info1 3023	// displays horizontal speed as: x.xxx	( 3023/1000 = 3 decimals )

CHS information types:
----------------------
// start: 0
 0 - CH_INFO_EMPTY,		// empty

// start: 1 - player info
 1 - CH_INFO_SPEED,		// speed - uses defrag unit setting (kmh,mph,u)
 2 - CH_INFO_HEALTH,		// player health
 3 - CH_INFO_ARMOR,		// player armor
 4 - CH_INFO_AMMO,		// player ammo for currently selected weapon
 5 - CH_INFO_HEALTH_ARMOR,	// player health/armor
 6 - CH_INFO_HEALTH_ARMOR_AMMO,	// player health/armor/ammo
 7 - CH_INFO_CONTROL_INPUT,	// player control input
 8 - CH_INFO_08,		// empty
 9 - CH_INFO_09,		// empty

// start: 10 - timers
10 - CH_INFO_SERVERTIME,	// server timer
11 - CH_INFO_TIME,		// defrag timer
12 - CH_INFO_BESTTIME,		// defrag besttime for current map
13 - CH_INFO_TIMEDIFFERENCE,	// defrag besttime - timer
14 - CH_INFO_14,		// empty
15 - CH_INFO_15,		// empty
16 - CH_INFO_16,		// empty
17 - CH_INFO_17,		// empty
18 - CH_INFO_18,		// empty
19 - CH_INFO_19,		// empty

// start: 20 - player speed (uses ups)
20 - CH_INFO_SPEED_X,			// speed along world x axis
21 - CH_INFO_SPEED_Y,			// speed along world y axis
22 - CH_INFO_SPEED_Z,			// speed along world z axis
23 - CH_INFO_SPEED_XY,			// horizontal speed
24 - CH_INFO_SPEED_XYZ,			// true speed
25 - CH_INFO_SPEED_FORWARD,		// speed relative to forward
26 - CH_INFO_SPEED_SIDEWAYS,		// speed relative to side
27 - CH_INFO_SPEED_FORWARD_SIDEWAYS,	// speed relative to forward/side
28 - CH_INFO_SPEED_XY_FORWARD_SIDEWAYS,	// horizontal speed/speed relative to forward/side
29 - CH_INFO_29,			// empty

// start: 30 - player position relative to the world and angles 
30 - CH_INFO_PITCH,			// player pitch
31 - CH_INFO_YAW,			// player yaw
32 - CH_INFO_PITCH_YAW,			// player pitch/yaw
33 - CH_INFO_PLAYER_XYZ,		// player position in the world
34 - CH_INFO_PLAYER_XYZ_PITCH_YAW,	// player position in the world and pitch/yaw
35 - CH_INFO_35,			// empty
36 - CH_INFO_36,			// empty
37 - CH_INFO_37,			// empty
38 - CH_INFO_38,			// empty
39 - CH_INFO_39,			// empty

// start: 40 - plane distances (that player is looking at)
40 - CH_INFO_DISTANCE_XY,		// horizontal distance to plane
41 - CH_INFO_DISTANCE_Z,		// vertical distance to plane
42 - CH_INFO_DISTANCE_XYZ,		// true distance to plane
43 - CH_INFO_DISTANCE_XY_Z_XYZ,		// horizontal/vertical/true distance to plane
44 - CH_INFO_LOOK_XYZ,			// world x, y, z location of plane
45 - CH_INFO_45,			// empty
46 - CH_INFO_46,			// empty
47 - CH_INFO_47,			// empty
48 - CH_INFO_48,			// empty
49 - CH_INFO_49,			// empty

// start: 50 - overbounce
50 - CH_INFO_OVERBOUNCE_BELOW,		// overbounce detection for floor below player (regardless of where playe is looking)
51 - CH_INFO_OVERBOUNCE_LOOK_GO,	// overbounce detection for floor player is looking at
52 - CH_INFO_OVERBOUNCE_LOOK_JUMP,	// overbounce on jump detection for floor player is looking at
53 - CH_INFO_OVERBOUNCE_LOOK_BOTH,	// overbounce and overbounce on jump detection for floor player is looking at
54 - CH_INFO_OVERBOUNCE_ALL,		// all overbounce detections on
55 - CH_INFO_55,			// empty
56 - CH_INFO_56,			// empty
57 - CH_INFO_57,			// empty
58 - CH_INFO_58,			// empty
59 - CH_INFO_59,			// empty

// start: 60 - settings
60 - CH_INFO_SETTINGS1,	// server settings: com_maxfps/sv_fps/g_synchronousclients/pmove_msec(if pmove_fixed is on)/timescale (will not display demo settings at demo playback, but local q3 settings)
61 - CH_INFO_SETTINGS2,	// mapname servername
62 - CH_INFO_62,	// empty
63 - CH_INFO_63,	// empty
64 - CH_INFO_64,	// empty
65 - CH_INFO_65,	// empty
66 - CH_INFO_66,	// empty
67 - CH_INFO_67,	// empty
68 - CH_INFO_68,	// empty
69 - CH_INFO_69,	// empty

// start: 70 - defrag stats
70 - CH_INFO_HEIGHT,		// defrag jump height
71 - CH_INFO_DISTANCE,		// defrag jump distance
72 - CH_INFO_HIGHEST,		// defrag stats - highest jump
73 - CH_INFO_LONGEST,		// defrag stats - longest jump
74 - CH_INFO_OVERALLDISTANCE,	// defrag stats - distance meter
75 - CH_INFO_SPENT,		// defrag stats - health / armor spent
76 - CH_INFO_SHOTS,		// defrag stats - shots fired
77 - CH_INFO_HSPEED,		// defrag stats - highest speed
78 - CH_INFO_78,		// empty
79 - CH_INFO_79,		// empty

Sample (backup your q3config, then paste this stuff in):
--------------------------------------------------------
seta df_chs0_Draw "1"
seta df_chs0_FontColor "2"
seta df_chs0_FontTransparency ".6"

seta df_chs1_Draw "1"
seta df_chs1_FontSize "6"
seta df_chs1_FontShadow "1"
seta df_chs1_FontColor "7"
seta df_chs1_FontTransparency ".3"
seta df_chs1_LabelColor "2"
seta df_chs1_LabelType "0"
seta df_chs1_DisplayType "0"
seta df_chs1_OffsetX "0"
seta df_chs1_OffsetY "0"
seta df_chs1_Info1 "7"
seta df_chs1_Info2 "52"
seta df_chs1_Info3 "51"
seta df_chs1_Info4 "50"
seta df_chs1_Info5 "1023"
seta df_chs1_Info6 "0"
seta df_chs1_Info7 "11"
seta df_chs1_Info8 "0"

seta df_chs2_Draw "1"
seta df_chs2_FontSize "6"
seta df_chs2_FontShadow "1"
seta df_chs2_FontColor "3"
seta df_chs2_FontTransparency ".6"
seta df_chs2_LabelColor "1"
seta df_chs2_LabelType "2"
seta df_chs2_DisplayType "4"
seta df_chs2_OffsetX "0"
seta df_chs2_OffsetY "75"
seta df_chs2_Info1 "54"
seta df_chs2_Info2 "28"
seta df_chs2_Info3 "34"
seta df_chs2_Info4 "10"
seta df_chs2_Info5 "4044"
seta df_chs2_Info6 "4043"
seta df_chs2_Info7 "60"
seta df_chs2_Info8 "61"
