undefine(`format')dnl
changequote([*,*])define(XREF,[*<ref id="$1" name="$2">*])dnl
define(_TITLE,[*<title>$1</title>*])define(_AUTHOR,[*<author>$1*])define(_DATE,[*<date>$1*])dnl
define(_ABSTRACT,[*<abstract>$1</abstract>*])dnl
define(ANCHOR,[*<label id="$1">*])dnl
define(SECTION,[*ifelse($2,,<sect$1>$3,<sect$1>$3[*
*]ANCHOR($2))*])dnl
define(_SECT,[*SECTION(,$1,$2)*])dnl
define(_SECT1,[*SECTION(1,$1,$2)*])dnl
define(_SECT2,[*SECTION(2,$1,$2)*])dnl
define(_SECT3,[*SECTION(3,$1,$2)*])dnl
define(_SECT4,[*SECTION(4,$1,$2)*])dnl
define(LI,[*<item>$1*])dnl
define(ULIST,[*<itemize>
$1</itemize>*])dnl
define(OLIST,[*<enum>
$1</enum>*])dnl
define(LITERALON,[*<tscreen><verb>*])dnl
define(LITERALOFF,[*</verb></tscreen>*])dnl
define(LITERAL,[*LITERALON()[*$1*]LITERALOFF()*])dnl
define(TOC,[*<to[**]c>*])dnl
define(_P,<p>)dnl
define(DL,<descrip>$1</descrip>)dnl
define(DT,<tag>$1</tag>$2)dnl
define(HELPER_VAEJOR,[*XREF(credits-vaejor,Vaejor)*])dnl
define(HELPER_BELAC,[*XREF(credits-belac,BeLaC)*])dnl
define(HELPER_SWEETNUTZ,[*XREF(credits-belac,SweetnutZ)*])dnl
define(HELPER_MADAD,[*XREF(credits-madad,Mad Ad)*])dnl
define(HELPER_DEMENTOR,[*XREF(credits-dementor,dementor)*])dnl
define(HELPER_THNOM,[*XREF(credits-thnom,thnom)*])dnl
define(HELPER_RFACTORY,[*XREF(credits-rfactory,dairyman)*])dnl
define(FROM_RFACTORY,[*<!-- rfactory -->*])dnl
define(EM,[*<it>$1</iT>*])dnl
define(NL,<NEWLINE>)dnl
define(_URL,[*ifelse($2,,<url url="$1">,<htmlurl url="$1" name="$2">)*])dnl
define(_DEADURL,[*ifelse($2,$2,$2)*])dnl
define(_ELIDE,[*<!-- $1 -->*])dnl
define(_DEVNOTE,[*_P()Programmer's (mod) note: $1*])dnl
<!doctype linuxdoc system [
<!ENTITY q3ta 'Quake III: Team Arena'>
<!ENTITY wfa 'Weapons Factory Arena'>
<!ENTITY int '&lsqb;int&rsqb;'>
<!ENTITY float '&lsqb;float&rsqb;'>
<!ENTITY color '&lsqb;color&rsqb;'>
<!ENTITY rect '&lsqb;rect&rsqb;'>
<!ENTITY string '&lsqb;string&rsqb;'>
<!ENTITY script '&lsqb;script&rsqb;'>
]>

<article>

_TITLE(Quake III: Team Arena Menu Files)
_AUTHOR(PhaethonH (phaethon at linux ucla edu))
_DATE(2006 Nov 25)
dnl _DATE(2003 Jan 26)
dnl _DATE(2003 Jan 20)
dnl _DATE(2003 Jan 18)
dnl _DATE(2002 Mar 07)
dnl _DATE(2002 Mar 06)
dnl _DATE(2002 Feb 22)
dnl _DATE(2002 Feb 21)
dnl _DATE(2001 June 14)
dnl _DATE(2001 May 19)
dnl _DATE(2001 April 25)
dnl _DATE(2001 April 23)
dnl _DATE(2001 April 22)
dnl _DATE(2001 March 30)
dnl _DATE(2001 March 14)
_ABSTRACT([*
Description of the
&q3ta;
menu scripting language in its role as general menuing and as HUD.
*])


TOC()


_SECT(intro,Introduction)

_SECT1(intro-copyright,Copyright)
_P()
Copyright (c)  2003  PhaethonH
_P()
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1
or any later version published by the Free Software Foundation;
with no Invariant Sections,
with no Front-Cover Texts,
and with no Back-Cover Texts.
A copy of the license is included in the section entitled
"GNU Free Documentation License".

_P()
The original author is known as PhaethonH (phaethon@linux.ucla.edu).
Sections or paragraphs may be copyrighted by different authors.
This document is released under the Free Documentation License (FDL) to protect the public's right to copying.

_SECT1(intro-disclaimer,Disclaimer)
_P()
This document is provided in the hopes of being useful.
There is no guarantee to the accuracy of the information contained within, although best-effort attempts are made at accuracy and completion.
Use this information at your own risk.
Although this information is unlikely to destroy a monitor, blow fuses, or cause the universe to cave in on itself, anything can go wrong (see Finagle's Law and Murphy's Law).
Furthermore, I (PhaethonH) don't get paid writing this in the first place.

_SECT1(intro-credits,Acknowledgements and Credits)
_P()
DL([*
DT(
ANCHOR(credits-vaejor)
[*Vaejor (Vaejor the-litte-at-sign-thingy mail com)*],
[*
itemDef::special, noted that itemDef::decoration doesn't take a parameter, some test results of itemDef::style, itemDef::textScale.
*])
DT(
ANCHOR(credits-belac)
[*BeLaC*],
[*
Caught typos in the values for cgame ownerdraw.
*])
DT(
ANCHOR(credits-sweetnutz)
[*SweetnutZ (mercjohns@hotmail.com), designer for
_URL(http://www.urbanterror.net/,Quake III Urban Terror)
(Q3UT)*],
[*
Having worked on the UI of Q3UT for Q3 1.27,
provided plenty of updates and verifications, with special thanks on
 menuDef::focuscolor,
 menuDef::disablecolor,
 menuDef::outOfBoundsClick,
 itemDef::asset_shader,
 itemDef::decoration,
 itemDef::wrapped,
 itemDef::type,
 itemDef::elementwidth,
 itemDef::elementheight,
 itemDef::elementtype,
 itemDef::outlineColor,
 ITEM_TYPE_MODEL,
 UI_*TEAM_LEADER/MEMBER*,
 and UI_OPPONENTMODEL
*])
DT(
ANCHOR(credits-madad)
[*Mad Ad (m::::::@n::.n::.c::)*],
[*
Indirectly alerted me to lack of info on actually loading a custom HUD.
*])
DT(
ANCHOR(credits-dementor)
[*dementor (dementor(at)comcast.net), coder for
_DEADURL(http://th.its-explosive.net/,Terror Quake 3) (TQ3)*],
[*

Introduced me to uiScript, and provided much of the initial material:
stopRefresh, LoadDemos, LoadMods, playMovie, verifyCDKey, StartServer,updateSPMenu, resetDefaults, getCDKey, loadArenas, loadGameInfo, resetScores,
RefreshServers, RefreshFilter, RunSPDemo, LoadMovies, RunMod, Quake3, closeJoin, ServerStatus, FoundServerStatus, FindPlayer, JoinServer, FoundPlayerJoinServer,
Quit, Controls, ServerSort, nextSkirmish, glCustom
*])
DT(
ANCHOR(credits-thnom)
[*thnom (irc://irc.enterthegame.com/thnom)*],
[*
Info on itemDef::model_rotation, UI_MAPCINEMATIC, UI_PREVIEWCINEMATIC; verified CG_1STPLACE and CG_2NDPLACE.
*])
DT(
ANCHOR(credits-rfactory)
[*dairyman (rfactory.org)*],
[*
Many updates and additions: fonts info, colors, popup info, text alignments, many ui elements, ownerdraws, identification of disabled/unused commands.
*])
*])dnl DL

_SECT1(intro-background,Background)
_P()
With the release of &q3ta; (Quake3 point release 1.27), Id Software introduced a new method of creating menus.
Instead of creating the menus in the C code of a QVM, menus can be described in menu description files, in a sort of menu-scripting language.
These are plaintext files that are more flexible and customizable than C-based menus.

_P()
For further customizations, these files can be read off the user's filesystem, outside of pak (pk3) files.
As a result, a customized menu can be used regardless of whether the server is in pure mode or not.
(XXX: Describe pure mode.)
The restriction, though, is that the filename EM(must) end with ``.menu'' or ``.cfg''.
Only then may Q3A (and mods based on it) be able to read from the filesystem instead of only from a pak (pk3) file.

_P()
The Quake 3 game is broken into three ``modules'': cgame, game, ui.
DL([*
DT(cgame,
[*
``Client Game'', this modules render the graphics, plays sounds, handles player control, and does other stuff to make the game interactive.
Some code is duplicated between cgame and game for purposes of prediction (compensate for net lag).
*])
DT(game,
[*
On the server side, this module lays out and tracks the actual gameplay.
A dedicated server requires only this module.
Inactive on client side, with the exception of single-player mode.
*])
DT(ui,
[*
``User Interface'', this module presents the main menu (on startup), and the in-game ESC menu.
This module is always active on client-side, but suspends (sleeps) during gameplay, until reactivated (woken up, e.g. pressing ESC key).
*])
*])

_P()
The HUD is now a special case of the menu code.
The menu code, however, is in the domain of the ``ui'' module.
As a result, much code criss-crosses between ``cgame'' and ``ui'' so that ``cgame'' may parse and handle menus (i.e. HUD elements).


_SECT1(intro-purpose,Purpose)
_P()
This document attempts to document the new menu scripting system of &q3ta;.
There is no other known publicly-available documentation on the new menu system.
The original author is also not aware of any privately-available documentation.
As such, this document is a continual work-in-progress, as new information is discovered and added.
Many pieces of this document are left empty or partially described.
They may be filled in at a later date (no guarantees).

_P()
The information collected on the menu system was collected while modifying the HUD for &wfa; pre-3.0 betas.
Therefore, there is a particular bias of concentration towards HUD development for that mod.

_P()
This document is more of a reference document, not a guide or a HOWTO, so expect much dry reading.

_SECT1(intro-feedback,Feedback)
_P()
If you find any mistrakes or discover new tidbits of information, you can e-mail
the relevant information to
_URL(mailto:phaethon@linux.ucla.edu,phaethon@linux.ucla.edu)
Depending on schoolwork load, time of day, mood, mailbox size, and phase of the moon, I may or may not respond and/or include submissions.
As a last resort, the copyright allows anyone else to take over the document management in the event of excessive negligence.

_SECT1(intro-latest-version,Latest Version)
_P()
The canonical URL for this document is
_URL(http://www.linux.ucla.edu/~phaethon/q3tamenu/q3tamenu.html).
This might change in the future, but seems unlikely.
Updates (to the document, and to the location) will be provided at the indicated URL.
The latest version of this document is determined by the document's date.

_SECT1(intro-changelog,ChangeLog)
_P()
DL([*
DT(2001.03.30,
[*
Initial release.
*])
DT(2001.04.21,
[*
Additions to itemDef:addColorRange.
*])
DT(2001.04.22,
[*
Touched up itemDef:textscale, *:border, menuDef:style, *:background.  Added links for values for ownerdraw, style, textstyle, etc.
*])
DT(2001.04.23,
[*
Contributions by Vaejor: itemDef:special, itemDef:decoration, itemDef:style, itemDef:textscale.
*])
DT(2001.04.23,
[*
Additions to itemDef:cvar, itemDef::cvarFloat, itemDef::cvarStrList, itemDef::align, ITEM_TYPE_SLIDER.
*])
DT(2001.04.23,
[*
Redid cgame and ui ownerdrawFlag descriptions in a more patterned manner.  Fixed error where half the values for cgame ownerdraw didn't match up with menudef.h (eek!).
*])
DT(2001.04.25,
[*
Some typos fixed.  Apparently all the values for ownerdrawflag were wrong, so the numbers are removed for now.
*])
DT(2001.05.19,
[*
Change of wordings.  No new info added.
*])
DT(2001.06.09,
[*
Additions and verifications by SweetnutZ of Silicon Ice Development (Quake III realism modification Urban Terror).
*])
DT(2001.06.14,
[*
Added extensive, but by no means complete, cross-references.
Preparing migration from LinxuDoc SGML DTD to DocBook SGML DTD by using m4 macro preprocessor.
*])
DT(2002.02.21,
[*
Added information on how to actually load a custom HUD.
*])
DT(2002.02.22,
[*
Added menuloader as another component of the menuing system.
Added sections on the menuloader files.
*])
DT(2002.03.03,
[*
Added uiScript section.
Thanks to HELPER_DEMENTOR().
*])
DT(2003.01.18,
[*
Added model_rotation information.
Thanks to HELPER_THNOM()
*])
DT(2003.01.22,
[*
Added info on UI_MAPCINEMATIC and UI_PREVIEWCINEMATIC.
Thanks to HELPER_THNOM()
*])
DT(2003.01.26,
[*
Expansions on cinematics-related entries.
Rewordings in Background section.
*])
DT(2006.11.25,
[*
Numerous updates and edits from _URL(http://rfactory.org/,The Reaction Factory) 2006.03.17 edition, particularly on UI elements.
Started split of descriptions targeted for designers (things that do work) and for developers/programmers (things that EM(should) work/are broken).
*])
*])dnl ChangeLog list

_SECT(q3tamenu,The Q3TA Menu)
_SECT1(syntax,Documentation syntax)
_P()
Items in plain font is a keyword.
_P()
Items within square brackets ([]) are required.
_P()
Items within angle brackets (&lt;&gt;) are optional.
_P()
A ``string'' type can be optionally enclosed in double-quotes (").
This use of double-quotes is required if the string contains a space.
Highly recommended to always use double-quotes for strings, if for no other reason than style consistency.
_P()
A ``int'' type is an integer number, negative or not, with no fractional (decimal) portion.
_P()
A ``float'' type is a floating point number, negative or not, with or without a fractional (decimal) portion.
_P()
A ``color'' type is four sequential floats, indicating a RGBA value.
Each float corresponds to:
OLIST(
LI([*Red component*])
LI([*Green component*])
LI([*Blue component*])
LI([*Alpha component*])
)
_P()
Each component is given a value from zero (none) to one (full).
Zero alpha is full transparency (invisible), with one being full opacity.
Partial values are fractional numbers between 0 and 1 (e.g. "0.58").
_P()
A ``rect'' type is four sequential ints.
The four numbers correspond to:
OLIST(
LI(Horizontal (X) position of the rectangle's upper-left corner, 0 = left edge)
LI(Vertical (Y) position of the rectangle's upper-left corner, 0 = top edge)
LI(Width of the rectangle, max width = 640)
LI(Height of the rectangle, max height = 480)
)
_P()
The coordinates are scaled to a 640x480 screen: horizontal values range from 0 to 640, vertical values range from 0 to 480.
So even if the screen resolution is 1600x1200, "(320, 240)" (half of 640, half of 480) still means the center of the screen.
"0 0 640 480" is full-screen.
_P()
The special marker XXX indicates meta-notes/hints about incompleteness in some form.

_SECT1(menu-layout,Menu Layout)
_P()
The description of menus can lay across many files.
In fact, the &q3ta; main menu is described across more than 30 files.
There are three main components to the menu system:
OLIST(
LI([*menuloader*])
LI([*menu definition (menuDef)*])
LI([*item definition (itemDef)*])
)

_P()
Items are the individual parts of a menu that actually carry out actions.
Menus are logical (and physical) groupings of items.
Submenus are possible, but not directly (i.e. no defining a menu inside a menu);
instead, an item may open another menu, then re-open the previous menu upon closing, creating a submenu effect.
Menuloader lists menus to prepare for display, and, in a sense, groups menus.

_SECT1(menu-format,Menu Format)
_P()
The format is loosely based on the programming language C.
`menuDef' and `itemDef' describe groupings that can be compared to C function or structs.
These two define their bodies within curly braces ({}).
Both `menuDef' and `itemDef' are composed of ``statements'' that end with a semicolon.
An `itemDef' can only be nested inside a `menuDef'.
This means no nesting an `itemDef' inside another `itemDef'.
`menuDef' cannot be nested inside anything else.


_SECT(menu-loader,Menuloader)
_P()
&quot;Menuloader&quot; is a fabricated word to describe the file.
Relevant variables in the game source use the name &quot;menuFile&quot;, but I feel that name would be confusing with &quot;menuDef&quot;.
So far, only one keyword is recognized: ``loadmenu''.

_P()
A menuloader groups menus into functionally related groups.
Q3TA has three such main groups:
ULIST([*
LI(ui/hud.txt - cgame module, in-game HUD)
LI(ui/ingame.txt - ui module, in-game menus (pressing ESC during gameplay))
LI(ui/menus.txt - ui module, non-game menus (as when you start up Q3))
*])

_P()
Frequently, the menuloader file has the extension &quot;.txt&quot;.
In the case of user-customized menus, the user would need to use the extension &quot;.cfg&quot; instead (&quot;.menu&quot; is also valid, but not recommended for sake of clarity).
The content is often:
LITERALON()
{
    loadmenu { "somefile.menu" }
    loadmenu { "someotherfile.menu" }
    loadmenu { "morefile.menu" }
    ...
}
LITERALOFF()
Where each string indicates a .menu file to load and prepare.



_SECT(menudef,menuDef { ... })
_P()
A menuDef is a grouping of itemDefs.
The following describe keywords that are recognized in a menuDef body, but outside of any itemDef bodies.

_SECT1(menu-font,font &string;)
_P()
The given string is interpreted as a font name.
The default is ``default''.
_ELIDE([*&q3ta; is now able to use True-Type Font (TTF), so a TTF font name can be provided here, as long as the corresponding TTF is available to &q3ta; (usually in a pk3 pak file).*])
FROM_RFACTORY() This command should not be used as it only defines one of the three required font sizes that Team Aren uses.

_SECT1(menu-name,name &string;)
_P()
Sets a name for the menu.
This keyword is primarily useful when opening the menu as a submenu, where an item in another menu can open this menu by name.
_P()
See also:
XREF(item-name,`itemDef::name'),
XREF(item-group,`itemDef::group'),
XREF(script-open,`script::open'),
XREF(script,`Script actions').

_SECT1(menu-rect,rect &rect;)
_P()
Define a rectangle on the screen for the menu to occupy.
Menu rectangles may overlap; the last rect defined sits on top.
Nested items are offset from this rect's left and top edges (meaning this rect acts as a new "mini-screen" for coordinates for the items inside).
_P()
See also:
XREF(menu-fullscreen,`menuDef::fullscreen'),
XREF(item-rect,`itemDef::rect'),
XREF(script-transition,`script::transition').

_SECT1(menu-fullscreen,fullscreen &int;)
_P()
_ELIDE([*A shortcut method to set `rect' to fill up the entire screen, which is just ``rect 0 0 640 480''.*])
FROM_RFACTORY() A method of setting up a rectangle on the screen for the menu to occupy that covers the entire screen and to tell the program that nothing else is being rendered underneath this menu. This command must be used in place of the 'rect' command for the bottom menu.
_P()
See also:
XREF(menu-rect,`menuDef::rect'),
XREF(script-transition,`script::transition').

_SECT1(menu-style,style &int;)
_P()
Defines a window style for the menu.
_P()
See also:
XREF(values-style,Values for ``style''),
XREF(item-style,`itemDef::style'),
XREF(values-style,Values for ``style'').

_SECT1(menu-visible,visible &int;)
_P()
Sets visibility of this menu, whether it gets drawn or not.
The visibility of a menu can be changed by an item, in conjunction with the menu name.
_P()
See also:
XREF(item-visible,`itemDef::visible'),
XREF(script-show,`script::show'),
XREF(script-hide,`script::hide').

_SECT1(menu-onopen,onOpen { &script; })
_P()
Runs the provided script when the menu opens.
When &q3ta; start up, the main menu runs this script (because it just opened).
This action also occurs when the menu is opened as a submenu.
_P()
See also:
XREF(menu-onclose,`menuDef::onClose'),
XREF(item-leavefocus,`itemDef::leaveFocus'),
XREF(script-open,`script::open'),
XREF(script,`Script actions').

_SECT1(menu-onclose,onClose { &script; })
_P()
Runs the provided script when the menu closes.
This action can be used for a limited amount of cleanup work and to mimick submenuing effects.
_P()
See also:
XREF(menu-onopen,`menuDef::onOpen'),
XREF(menu-outofboundsclick,`menuDef::outOfBoundsClick'),
XREF(script-close,`script::close'),
XREF(script,`Script actions').

_SECT1(menu-onesc,onESC { &script; })
_P()
Runs the provided script when the Escape key (ESC) is pressed.
This action usually closes the menu (by opening another).
<!-- XXX: more fluff -->
_P()
See also:
XREF(menu-outofboundsclick,`menuDef::outOfBoundsClick'),
XREF(script-open,`script::open'),
XREF(script,`Script actions').

_SECT1(menu-border,border &int;)
_P()
Sets a border type.
_P()
See also:
XREF(values-border,Values for ``border''),
XREF(menu-bordersize,`menuDef::bordersize'),
XREF(menu-bordercolor,`menuDef::bordercolor'),
XREF(item-border,`itemDef::border').

_SECT1(menu-bordersize,borderSize &float;)
_P()
Sets the border thickness.
The border is drawn inside of the menu rect.
The origin coordinates for nested items is shifted,
meaning that "0, 0" for itemDefs changes accordingly to avoid the border.
_P()
See also:
XREF(menu-border,`menuDef::border'),
XREF(menu-bordercolor,`menuDef::bordercolor'),
XREF(item-bordersize,`itemDef::bordersize').

_SECT1(menu-backcolor,backcolor &color;)
_P()
Sets the menu background color.
Only meaningful if the rect `style' is set to WINDOW_STYLE_FILLED.
<!-- XXX: verify. -->
_P()
See also:
XREF(menu-style,`menuDef::style'),
XREF(menu-background,`menuDef::background'),
XREF(menu-bordercolor,`menuDef::bordercolor'),
XREF(menu-focuscolor,`menuDef::focuscolor'),
XREF(menu-disablecolor,`menuDef::disablecolor'),
XREF(item-backcolor,`itemDef::backcolor').

_SECT1(menu-forecolor,forecolor &color;)
_P()
Sets menu foreground color.
_ELIDE([*Usage unclear, but the most obvious use is in displaying images that consist only of alpha values, such as a crosshair.*])
_ELIDE([*(Editor's note: that usage wasn't very obvious in the first place, which makes its other uses that much more obscure)*])
FROM_RFACTORY() Used as tint color for background shaders.
_P()
See also:
XREF(menu-style,`menuDef::style'),
XREF(menu-backcolor,`menuDef::backcolor'),
XREF(menu-bordercolor,`menuDef::bordercolor'),
XREF(menu-focuscolor,`menuDef::focuscolor'),
XREF(menu-disablecolor,`menuDef::disablecolor'),
XREF(item-forecolor,`itemDef::forecolor'),
XREF(script-setitemcolor,`script::setitemcolor').

_SECT1(menu-bordercolor,bordercolor &color;)
_P()
Sets the border color.
_P()
See also:
XREF(menu-border,`menuDef::border'),
XREF(menu-bordersize,`menuDef::bordersize'),
XREF(item-bordercolor,`itemDef::bordercolor').

_SECT1(menu-focuscolor,focuscolor &color;)
_P()
Sets the text color of items when they are focused -- that is, when the item is enabled and has the mouse cursor over it.
See also XREF(menu-disablecolor,disablecolor).
_P()
See also:
XREF(menu-disablecolor,`menuDef::disablecolor'),
XREF(menu-backcolor,`menuDef::backcolor'),
XREF(item-onfocus,`itemDef::onFocus'),
XREF(script-setfocus,`script::setfocus').

_SECT1(menu-disablecolor,disablecolor &color;)
_P()
Sets the text color of items when they are disabled.
See also
XREF(menu-focuscolor,focuscolor),
XREF(item-cvartest,cvartest),
XREF(item-disablecvar,disableCvar).

_SECT1(menu-background,background &string;)
_P()
The provided string is interpreted as a Q3A shader or an image (JPG or TGA) to display in the rect background.
Images are stretched to fit the rect, ignoring aspect ratios.
Shaders can have their own instructions on how to fill the rect.
_P()
See also:
XREF(menu-style,`menuDef::style'),
XREF(item-background,`itemDef::background').

_SECT1(menu-ownerdraw,ownerdraw &int;)
_P()
Causes the Q3A engine to draw something within the confines of the menu rect.
Primary use is in HUDs (such as showing health).
_P()
See also:
XREF(values-cg-ownerdraw,Values for cgame ``ownerdraw''),
XREF(values-ui-ownerdraw,Values for ui ``ownerdraw''),
XREF(menu-style,`menuDef::style'),
XREF(menu-ownerdrawflag,`menuDef::ownerdrawflag'),
XREF(item-ownerdraw,`itemDef::ownerdraw').

_SECT1(menu-ownerdrawflag,ownerdrawflag &int;)
_P()
The menu asks the Q3A engine for a certain value; this value determines whether the menu (along with its items) gets drawn or not.
If the menu was already invisible, nothing is drawn regardless of this flag value.
_P()
See also:
XREF(values-cg-ownerdrawflag,Values for cgame ``ownerdrawflag'').
XREF(values-ui-ownerdrawflag,Values for ui ``ownerdrawflag'').
XREF(menu-ownerdraw,`menuDef::ownerdraw'),
XREF(item-ownerdrawflag,`menuDef::ownerdrawflag').

_SECT1(menu-outofboundsclick,outOfBoundsClick)
_P()
According to HELPER_SWEETNUTZ(),
with this tag/flag in the menuDef,
clicking outside the menu rectangle area causes the menu to close.
<!-- XXX: verify -->
_P()
See also:
XREF(menu-onclose,`menuDef::onClose'),
XREF(menu-onesc,`menuDef::onEsc').

_SECT1(menu-soundloop,soundLoop &string;)
_P()
The given string is interpreted as a sound name (filename for the most part) to play in a loop.
The loop is stopped by providing an empty string (soundLoop "").
_P()
See also:
XREF(script-play,`script::play'),
XREF(script-playlooped,`script::playerlooped').

_SECT1(menu-cinematic,cinematic &string;)
_P()
Plays a cinematic (RoQ file) within the menu rect.
The RoQ path name is provided in the string; the path name is as stored in the pk3 file.
RoQs can be created from AVIs by tools provided by Id Software.
AVIs can be created from multiple TGAs (or most any other image files) by various free/freeware/shareware/not-so-free tools.
_P()
See also:
XREF(menu-style,`menuDef::style'),
XREF(item-cinematic,`itemDef::cinematic').

_SECT1(menu-popup,popup)
_P()
_ELIDE([*no idea.*])
FROM_RFACTORY() Causes the menu to be drawn overtop of the calling menu. Only items in this menu can gain the focus, even though items in the underlying menu can be seen.

_SECT1(menu-fadeclamp,fadeClamp &float;)
_P()
Along with
XREF(menu-fadeamount,fadeAmount)
and
XREF(menu-fadecycle,fadeCycle),
implements a fade-in effect.
Best advice so far: fiddle with it.
_P()
See also:
XREF(menu-fadeamount,`menuDef::fadeAmount'),
XREF(menu-fadeclamp,`menuDef::fadeClamp'),
XREF(script-fadein,`script::fadein'),
XREF(script-fadeout,`script::fadeout').

_SECT1(menu-fadeamount,fadeAmount &float;)
_P()
Along with
XREF(menu-fadeclamp,fadeClamp)
and
XREF(menu-fadecycle,fadeCycle),
implements a fade-in effect.
Best advice so far: fiddle with it.
_P()
See also:
XREF(menu-fadecycle,menuDef::fadeCycle),
XREF(menu-fadeclamp,menuDef::fadeClamp),
XREF(script-fadein,`script::fadein'),
XREF(script-fadeout,`script::fadeout').

_SECT1(menu-fadecycle,fadeCycle &float;)
_P()
Along with
XREF(menu-fadeclamp,fadeClamp)
and
XREF(menu-fadeamount,fadeAmount),
implements a fade-in effect.
Best advice so far: fiddle with it.
_P()
See also:
XREF(menu-fadecycle,menuDef::fadeCycle),
XREF(menu-fadeamount,menuDef::fadeAmount),
XREF(script-fadein,`script::fadein'),
XREF(script-fadeout,`script::fadeout').



_SECT(itemdef,itemDef { ... })
_P()
An itemDef describes on item member of a menu.
The following keywords are recognized inside an itemDef:

_SECT1(item-name,name &string;)
_P()
Sets a name for the item.
Manipulation of an item is done through its name.
Names can correspond with a menu name, but since actions are carried out based on matching names, this could be used to create both awesome effects and terrible side-effects.
_P()
See also:
XREF(menu-name,`menuDef::name'),
XREF(item-group,`itemDef::group').

_SECT1(item-text,text &string;)
_P()
Use the provided string as a text to display
_DEVNOTE([*
This item largely corresponds to "label" items of other GUIs).
*])
_P()
See also:
XREF(item-textalign,`itemDef::textalign'),
XREF(item-textalignx,`itemDef::textalignx'),
XREF(item-textaligny,`itemDef::textaligny'),
XREF(item-textscale,`itemDef::textscale'),
XREF(item-textstyle,`itemDef::textstyle').

_SECT1(item-group,group &string;)
_P()
Sets a group name for the item.
This grouping also allows the manipulation of many items simultaneously (such as hiding the radio buttons together).
_DEVNOTE([*
Primary use is in implementing radio buttons (where selecting one button in the group deselects all others in the same group).
*])
_P()
See also:
XREF(item-name,`itemDef::name'),
XREF(menu-name,`menuDef::name').

_SECT1(item-asset_model,asset_model &string;)
_P()
Displays a Q3A model.
The provided string indicates the path name of a model to display.
View the pk3s to see the expected path names.
<!-- Rotates? -->
_P()
See also:
XREF(item-model_origin,`itemDef::model_origin'),
XREF(item-model_fovx,`itemDef::model_fovx'),
XREF(item-model_fovy,`itemDef::model_fovy'),
XREF(item-model_rotation,`itemDef::model_rotation'),
XREF(item-model_angle,`itemDef::model_angle').

_SECT1(item-asset_shader,asset_shader &string;)
_P()
_ELIDE([*
Displays a shader?
I'm thinking along the lines of a tiles displayer or "select-a-wall-shader".
Or perhaps, like, say, selecting a crosshair?
*])
FROM_RFACTORY() Apparently not used (ineffectual).

_SECT1(item-model_origin,model_origin &float; &float; &float;)
_P()
_ELIDE([*
no idea.
Something about on-screen coordinates?
Coordinates in 3-space mapped to screen?
*])
FROM_RFACTORY() Apparently not used (ineffectual).
_P()
See also:
XREF(item-asset_model,`itemDef::asset_model'),
XREF(item-model_fovx,`itemDef::model_fovx'),
XREF(item-model_fovy,`itemDef::model_fovy'),
XREF(item-model_rotation,`itemDef::model_rotation'),
XREF(item-model_angle,`itemDef::model_angle').

_SECT1(item-model_fovx,model_fovx &float;)
_P()
Field-Of-Vision along the screen's X (horizontal) axis.
Affects horizontal (left-right) "stretchiness".
Units are degress, 90 is "normal", lesser values cause "stretching out", greater values cause "shrinking".
Most monitors have an aspect ratio of 4:3, so this value should be 3/4 of model_fovy (3 * fovx == 4 * fovy).
_P()
See also:
XREF(item-asset_model,`itemDef::asset_model'),
XREF(item-model_origin,`itemDef::model_origin'),
XREF(item-model_fovy,`itemDef::model_fovy'),
XREF(item-model_rotation,`itemDef::model_rotation'),
XREF(item-model_angle,`itemDef::model_angle').

_SECT1(item-model_fovy,model_fovy &float;)
_P()
Field-Of-Vision along the screen's Y (vertical) axis.
Affects vertical (up-down) "stretchiness".
Units are degress, 90 is "normal", lesser values cause "stretching out", greater values cause "shrinking"..
Most monitors have an aspect ratio of 4:3, so this value should be 4/3 of model_fovx (3 * fovx = 4 * fovy).
_P()
See also:
XREF(item-asset_model,`itemDef::asset_model'),
XREF(item-model_origin,`itemDef::model_origin'),
XREF(item-model_fovx,`itemDef::model_fovx'),
XREF(item-model_rotation,`itemDef::model_rotation'),
XREF(item-model_angle,`itemDef::model_angle').

_SECT1(item-model_rotation,model_rotation &int;)
_P()
Model rotation rate.
Units is number of milliseconds to wait before rotating model by 1 degree
(i.e. milliseconds per degree).
Value of zero disables rotation.
(thanks HELPER_THNOM())
_P()
See also:
XREF(item-asset_model,`itemDef::asset_model'),
XREF(item-model_origin,`itemDef::model_origin'),
XREF(item-model_fovx,`itemDef::model_fovx'),
XREF(item-model_fovy,`itemDef::model_fovy'),
XREF(item-model_angle,`itemDef::model_angle').

_SECT1(item-model_angle,model_angle &int;)
_P()
View model from a fixed angle (angle around Z-axis, i.e. on X-Y plane).
If model_rotation is non-zero, this value acts as the base (starting) angle for rotation.
XXX: what does 0 mean?  head-on?
_P()
See also:
XREF(item-asset_model,`itemDef::asset_model'),
XREF(item-model_origin,`itemDef::model_origin'),
XREF(item-model_fovx,`itemDef::model_fovx'),
XREF(item-model_fovy,`itemDef::model_fovy'),
XREF(item-model_rotation,`itemDef::model_rotation').

_SECT1(item-rect,rect &rect;)
_P()
Defines a rectangular area within a menu.
The item's rect is positioned relative to the menu's rect; i.e. the menu's rect acts as a "mini-screen" for the coordinates of item rect.
This shifting eases the relocating of menus; menus can be moved without having to recalculate the positions of its items.
The size of a "unit" is the same as that used by the menu; i.e. no squishing-into-the-rect.
x = 640 still means move 640 "pixels" over to the right, even if off-screen.
_P()
See also:
XREF(menu-fullscreen,`menuDef::fullscreen'),
XREF(menu-rect,`menuDef::rect').

_SECT1(item-style,style &int;)
_P()
Fill style of the rect.
Values are listed in XREF(values-style,Values for ``style'').
HELPER_VAEJOR()'s earlier tests had Q3 crashing when the value was 5 (WINDOW_STYLE_CINEMATIC); the reason was that no RoQ file was provided in a `cinematic' field.
_P()
See also:
XREF(values-style,Values for ``style''),
XREF(menu-style,`menuDef::style'),
XREF(item-cinematic,`itemDef::cinematic'),
XREF(menu-cinematic,`menuDef::cinematic').

_SECT1(item-decoration,decoration)
_P()
Presence of this keyword declares whether this item is a decoration item or not.
Non-decoration items would be hotspots, buttons, sliders, etc., items that cause actions to happen.
Decoration items would be menu border graphics, logos, animation boxes, etc.
_P()
HELPER_SWEETNUTZ() points out that anything without this keyword will make mouseover sound and other assorted things.

_SECT1(item-notselectable,notselectable &int;)
_P()
_ELIDE([*
unsure.
related to listboxes.
*])
FROM_RFACTORY() Makes a List Box element unselectable. Used to make List Boxes display only.

_SECT1(item-wrapped,wrapped)
_P()
Enforces manual text wrapping of the text provided in the `text' field.
The two-character sequence ``\r'' (backslash, r) causes a manual and forced wrap (newline) in texts.
_P()
HELPER_SWEETNUTZ() provides an example:
LITERAL([*
  autowrapped
  text "here is line one of the text\r"
       "here is line two of text\r"
       "here is line three, etc etc etc"
*])
_P()
See also:
XREF(item-autowrapped,`itemDef::autowrapped').

_SECT1(item-autowrapped,autowrapped)
_P()
Enforces auto-wrapping of the text provided by the `text' field.
This keyword causes the text to automatically wrap to fit within the rect.
_P()
See also:
XREF(item-wrapped,`itemDef::wrapped').

_SECT1(item-horizontalscroll,horizontalscroll)
_P()
_ELIDE([*Displays a horizontal scrollbar for listboxes.*])
_ELIDE([*XXX: always, or just when it's needed?*])
Makes a List Box scroll horiziontally rather than vertically. Only applicable if the List Box is displaying graphical elements.

_SECT1(item-type,type &int;)
_P()
Sets the item type.
If not specified, the default is XREF(item-type-text,ITEM_TYPE_TEXT).
See also:
XREF(values-item-type,Values for item ``type'').

_SECT1(item-elementwidth,elementwidth &float;)
_P()
Related to the width of elements inside an image listbox.
HELPER_SWEETNUTZ() points out that Q3 head icons are 32 pixels wide, so ``elementwidth 32;'' would be used for an image listbox of Q3 head icons.
_P()
See also:
XREF(item-elementheight,`itemDef::elementheight'),
XREF(item-columns,`itemDef::columns').

_SECT1(item-elementheight,elementheight &float;)
_P()
As with XREF(item-elementwidth,`elementwidth'), but with element height.
_P()
See also:
XREF(item-elementwidth,`itemDef::elementwidth').

_SECT1(item-feeder,feeder &float;)
_P()
The game builds many types of lists internally (so that it may be re-updated, sorted, modified, etc.).
Feeders provide a hook to this internal list for the menu system.
Items that use feeders have a list that reflect this internal list.
The specific internal list to use is indicated by the given parameter.
_P()
Items that use a feeder are specially flagged to follow their selection.
That is to say, when you select an object in the list, the internal list "learns" which item you have just selected.
This maintains the parallel of states between the internal list and the list presented by the menu system.
_P()
HELPER_SWEETNUTZ() verifies the linking into the game code for listbox data, but I'm still stumped on the use of a float, instead of int.
_P()
See also:
XREF(values-feeder,Values for ``feeder''),
XREF(item-elementtype,`itemDef::elementtype'),
XREF(item-columns,`itemDef::columns').

_SECT1(item-elementtype,elementtype &int;)
_P()
FROM_RFACTORY() Specifies the type of element in a listbox, either text ("LISTBOX_TEXT", 0) or image ("LISTBOX_IMAGE", 1).
<!-- Thanks, SweetnutZ! -->
dnl _ELIDE([*HELPER_SWEETNUTZ() is aware of only two types: text and images.*])
_ELIDE([*Further analysis forthcoming.*])
_ELIDE([*XXX: Analyze this some more.*])
_P()
See also:
XREF(item-elementheight,`itemDef::elementheight'),
XREF(item-elementwidth,`itemDef::elementwidth'),
XREF(item-feeder,`itemDef::feeder').

_SECT1(item-columns,columns &int; &int; ... )
_P()
First integer is the number of columns.
Following that are sets of three integers, one set for each column just mentioned.
Each set of three integers consists of the following:
OLIST(
_ELIDE([*LI([*unsure: offset from the left of the item rect?  Offset from right edge of last column?*])*])
FROM_RFACTORY() LI([*offset from the left of the item rect in pixels.*])
dnl _ELIDE([*LI([*width in characters (for a 8-pixel wide fixed-width character, so multiply by 8 to get pixel width).*])*])
FROM_RFACTORY() LI([*width of graphic if not text context (use 0 otherwise). Used only in HUD.*])
LI([*maximum number of characters to display at a time.*])
)
_P()
See also:
XREF(item-feeder,`itemDef::feeder'),
XREF(item-elementwidth,`itemDef::elementwidth'),
XREF(item-elementheight,`itemDef::elementheight').

_SECT1(item-border,border &int;)
_P()
Sets a border style for the item.
_P()
See also:
XREF(item-bordersize,`itemDef::borderSize'),
XREF(item-bordercolor,`itemDef::borderColor'),
XREF(menu-border,menuDef::border').

_SECT1(item-bordersize,borderSize &float;)
_P()
Sets the thickness of the border.
The border is drawn on the inside of the item rect.
_P()
See also:
XREF(item-border,`itemDef::border'),
XREF(item-bordercolor,`itemDef::borderColor'),
XREF(menu-bordersize,`menuDef::borderSize').

_SECT1(item-visible,visible &int;)
_P()
Sets the visibility of the item.
"0" prevents it from being drawn, "1" (or any other value) causes it to be drawn.
_P()
See also:
XREF(item-cvartest,`itemDef::cvartest'),
XREF(item-showcvar,`itemDef::showCvar'),
XREF(item-hidecvar,`itemDef::hideCvar'),
XREF(menu-visible,`menuDef::visible'),
XREF(script-show,`script::show'),
XREF(script-hide,`script::hide').


_SECT1(item-ownerdraw,ownderdraw &int;)
_P()
Like the menu's ownerdraw, this statement makes a request to the Q3A engine to draw something within the item rect.
_P()
See also:
XREF(values-cg-ownerdraw,Values for cgame ``ownerdraw''),
XREF(values-ui-ownerdraw,Values for ui ``ownerdraw''),
XREF(item-ownerdrawflag,`itemDef::ownerdrawflag')
XREF(menu-ownerdraw,`menuDef::ownerdraw').

_SECT1(item-align,align &int;)
_P()
The only uses found for this have been in the default HUDs, in conjunction with the CG_AREA_POWERUP ownerdraw.
The two known values are 0 (HUD_VERTICAL) and 1 (HUD_HORIZONTAL).
These affect the way multiple powerups are drawn, whether vertically (aligned to the bottom, sorted in sequence of remaining times) or horizontally (from left to right?).
_ELIDE([*Other uses for this are unknown.*])
_P()
See also:
XREF(item-textalign,`itemDef::textalign').

_SECT1(item-textalign,textalign &int;)
_P()
_ELIDE([*Automatically-calculated item (text) alignment.*])
FROM_RFACTORY() Determines where the horizontal alignment point is applied to text.
Values are:
DL([*
DT(0 ITEM_ALIGN_LEFT,
[*
FROM_RFACTORY() Left side of text.
*])
DT(1 ITEM_ALIGN_CENTER,
[*
FROM_RFACTORY() Center of text.
*])
DT(2 ITEM_ALIGN_RIGHT,
[*
FROM_RFACTORY() Right side of text.
*])
*])
_P()
See also:
XREF(item-text,`itemDef::text'),
XREF(item-textalignx,`itemDef::textalignx'),
XREF(item-textaligny,`itemDef::textaligny'),
XREF(item-textscale,`itemDef::textscale'),
XREF(item-textstyle,`itemDef::textstyle').

_SECT1(item-textalignx,textalignx &float;)
_P()
_ELIDE([*
Manual horizonal text alignment.
Unknown units.
*])
FROM_RFACTORY() Horizontal text alignment in pixels (of 640 max) from left edge of rect to alignment point of text.
_P()
See also:
XREF(item-text,`itemDef::text'),
XREF(item-textalign,`itemDef::textalign'),
XREF(item-textaligny,`itemDef::textaligny'),
XREF(item-textscale,`itemDef::textscale'),
XREF(item-textstyle,`itemDef::textstyle').

_SECT1(item-textaligny,textaligny &float;)
_P()
_ELIDE([*
Manual vertical text alignment.
Unknown units.
*])
FROM_RFACTORY() Vertical text alignment in pixels (of 480 max) from top edge of rect to bottom of text.
_P()
See also:
XREF(item-text,`itemDef::text'),
XREF(item-textalign,`itemDef::textalign'),
XREF(item-textalignx,`itemDef::textalignx'),
XREF(item-textscale,`itemDef::textscale'),
XREF(item-textstyle,`itemDef::textstyle').

_SECT1(item-textscale,textscale &float;)
_P()
Scale the text size.
_ELIDE([*
For sake of reference,
the following sizes were ``eyeballed'' on a 640x480 screen: 
DL([*
DT(1.0,
[*
is about a 72-pt font.
*])
DT(0.33,
[*
is about a 16-pt font.
*])
DT(0.25,
[*
is about a 10-pt font.
*])
*])
*])dnl elide
A scale of 1.0 is 48 pixels tall (1.0 = 48, 0.5 = 24, 0.25 = 12, 0.2 = 10; textscale = height / 48).
_P()
This statement has special effects on certain ownerdraws.
The known ones with such special effects are CG_PLAYER_AMMO_VALUE, CG_PLAYER_HEALTH, and CG_PLAYER_ARMOR_VALUE.
Each of these show a plain number if textScale is less than 0.75.
Otherwise, they show a "full-size" element of a fixed size:
DL([*
DT(CG_PLAYER_AMMO_VALUE,
[*
128x48 box showing all available ammo types and counts
*])
DT(CG_PLAYER_HEALTH,
[*
128x24 horizontal graphical bar indicating health level.
*])
DT(CG_PLAYER_ARMOR_VALUE,
[*
128x24 horizontal graphical bar indicating armor level.
*])
*])
_P()
See also:
XREF(item-text,`itemDef::text'),
XREF(item-textalign,`itemDef::textalign'),
XREF(item-textalignx,`itemDef::textalignx'),
XREF(item-textaligny,`itemDef::textaligny'),
XREF(item-textstyle,`itemDef::textstyle').

_SECT1(item-textstyle,textstyle &int;)
_P()
Specifies a special effect to the text.
_P()
See also:
XREF(values-textstyle,Values for ``textstyle''),
XREF(item-text,`itemDef::text'),
XREF(item-textalign,`itemDef::textalign'),
XREF(item-textalignx,`itemDef::textalignx'),
XREF(item-textaligny,`itemDef::textaligny'),
XREF(item-textscale,`itemDef::textscale'),

_SECT1(item-backcolor,backcolor &color;)
_P()
Sets background color for the item when `style' is set to WINDOW_STYLE_FILLED.
<!-- This color is additive to the menu's background color, if any. -->
_P()
See also:
XREF(item-style,`itemDef::style'),
XREF(item-background,`itemDef::background'),
XREF(item-forecolor,`itemDef::forecolor'),
XREF(item-bordercolor,`itemDef::bordercolor'),
XREF(item-outlinecolor,`itemDef::outlinecolor').


_SECT1(item-forecolor,forecolor &color;)
_P()
Sets foreground color for the item.
Most prominent use is setting text color, although it also influences the color of any alpha-valued images.
_P()
See also:
XREF(item-style,`itemDef::style'),
XREF(item-background,`itemDef::background'),
XREF(item-backcolor,`itemDef::backcolor'),
XREF(item-bordercolor,`itemDef::bordercolor'),
XREF(item-outlinecolor,`itemDef::outlinecolor').

_SECT1(item-bordercolor,bordercolor &color;)
_P()
Sets border color.
_P()
See also:
XREF(item-border,`itemDef::border'),
XREF(item-bordersize,`itemDef::borderSize'),
XREF(item-forecolor,`itemDef::forecolor'),
XREF(item-backcolor,`itemDef::backcolor'),
XREF(item-outlinecolor,`itemDef::outlinecolor'),
XREF(menu-bordercolor,`menuDef::borderColor'),

_SECT1(item-outlinecolor,outlinecolor &color;)
_P()
dnl Many thanks to HELPER_SWEETNUTZ() on this one, who acquired knowledge only experience can bring.
<!-- Thanks, SweetnutZ! -->
_ELIDE([*
This keyword is known to work with text listbox, and maybe with image listbox.
The selected text is highlighted with the given color.
However, the outlining is done by drawing a box over the selection with the given color, so the best course of action is to use a very transparent color, such as "1 0 0 0.25".
*])
FROM_RFACTORY() This keyword works with text listbox.
The selected text is highlighted with the given color.
However, the outlining is done by drawing a box over the selection with the given color, so the best course of action is to use a very transparent color, such as "1 0 0 0.25".
_P()
See also:
XREF(item-type-listbox,`ITEM_TYPE_LISTBOX'),
XREF(item-style,`itemDef::style'),
XREF(item-feeder,`itemDef::feeder'),
XREF(item-background,`itemDef::background'),
XREF(item-forecolor,`itemDef::forecolor'),
XREF(item-backcolor,`itemDef::backcolor'),
XREF(item-bordercolor,`itemDef::bordercolor'),
XREF(item-outlinecolor,`itemDef::outlinecolor').

_SECT1(item-background,background &string;)
_P()
Provided string is taken as a shader name or image file to display as the item's background, confined within the item rect.
_P()
Rect's `style' has to be set to WINDOW_STYLE_SHADER.
The background image is scaled, ignoring aspect ratios, to fill the rect.
In other words, the image is distorted as needed to fill the rect completely.
See also XREF(menu-background,menuDef background).
_P()
See also:
XREF(window-style-shader,`WINDOW_STYLE_SHADER'),
XREF(item-style,`itemDef::style'),
XREF(item-forecolor,`itemDef::forecolor'),
XREF(item-backcolor,`itemDef::backcolor').

_SECT1(item-onfocus,onFocus { &script; })
_P()
The given script is run when the item gets focus.
This happens when the mouse rolls over it, the keyboard is used to move over to it (arrow keys), or focus is forcefully thrust upon it by another script.
_P()
See also:
XREF(item-type,`itemDef::type'),
XREF(item-type-button,ITEM_TYPE_BUTTON),
XREF(item-leavefocus,`itemDef::leaveFocus'),
XREF(item-forecolor,`itemDef::forecolor'),
XREF(menu-focuscolor,`menuDef::focusColor'),
XREF(script-setfocus,`script::setfocus'),
XREF(script,Script actions).

_SECT1(item-leavefocus,leaveFocus { &script; })
_P()
The provided script is run when the item loses focus.
Note that when a menu closes, its last focused item runs its `leaveFocus'.
_P()
See also:
XREF(item-type,`itemDef::type'),
XREF(item-type-button,ITEM_TYPE_BUTTON),
XREF(item-onfocus,`itemDef::onFocus'),
XREF(menu-onclose,`menuDef::onClose'),
XREF(menu-focuscolor,`menuDef::focuscolor'),
XREF(script,Script actions).

_SECT1(item-mouseenter,mouseEnter { &script; })
_P()
Runs the provided script when the mouse enter the item's rect.
_P()
See also:
XREF(item-type,`itemDef::type'),
XREF(item-type-button,ITEM_TYPE_BUTTON),
XREF(item-mouseexit,`itemDef::mouseExit'),
XREF(script,Script actiosn).

_SECT1(item-mouseexit,mouseExit { &script; })
_P()
Runs the provided script when the mouse leaves the item's rect.
_P()
See also:
XREF(item-type,`itemDef::type'),
XREF(item-type-button,ITEM_TYPE_BUTTON),
XREF(item-mouseenter,`itemDef::mouseEnter'),
XREF(script,Script action).

_SECT1(item-mouseentertext,mouseEnterText { &script; })
_P()
_ELIDE([*
unsure.
1) Run script when mouse touches text?
2) Run script when mouseclick is used to start editing an editfield?
*])
FROM_RFACTORY() Runs the provided script when the mouse touches text in item.
_P()
XREF(item-type,`itemDef::type'),
XREF(item-type-button,ITEM_TYPE_BUTTON),
XREF(item-mouseexittext,`itemDef::mouseExitText'),
XREF(item-mouseenter,`itemDef::mouseEnter'),
XREF(item-mouseexit,itemDef::mouseExit'),
XREF(script,Script actions).

_SECT1(item-mouseexittext,mouseExitText { &script; })
_P()
_ELIDE([*
unsure.
Presumably the exit counterpart of mouseEnterText.
*])
FROM_RFACTORY() Runs the provided script when the mouse leaves text in item.
_P()
See also:
XREF(item-type,`itemDef::type'),
XREF(item-type-button,ITEM_TYPE_BUTTON),
XREF(item-mouseentertext,`itemDef::mouseEnterText'),
XREF(item-mouseenter,`itemDef::mouseEnter'),
XREF(item-mouseexit,itemDef::mouseExit'),
XREF(script,Script actions).

_SECT1(item-action,action { &script; })
_P()
Runs the provided script when the mouse clicks in/on the item rect or when the Enter key is pressed while item has focus.
_ELIDE([*Script is run when mouse click or Enter key on/in the item rect.*])
_P()
See also:
XREF(item-type,`itemDef::type'),
XREF(item-type-button,ITEM_TYPE_BUTTON),
XREF(script,Script actions).

_SECT1(item-special,special &float;)
_P()
_ELIDE([*
unsure.
HELPER_VAEJOR() suspects this may be related to spacings.
Initial inspection of the source code does show that this keyword relates to spacing between items in CG_AREA_POWERUPS (larger values put in more spaces).
This is the only known use so far.
*])
FROM_RFACTORY() Used in the HUD to set spacing on powerup item display.

_SECT1(item-cvar,cvar &string;)
_P()
This keyword indicates a cvar to alter, with the various ways of altering indicated in other statements
(e.g. cvarFloat, cvarStrList, cvarFloatList, etc.)
_P()
For use in assigning keybinds, `type' has to be set to ITEM_TYPE_BIND, the `text' field holds the prompt (e.g. "Move forward:"), and `cvar' is the command to assign (e.g. "+forward").
_P()
See also:
XREF(item-type,`itemDef::type'),
XREF(item-type-bind,ITEM_TYPE_BIND),
XREF(item-cvarfloat,`itemDef::cvarFloat'),
XREF(item-cvarstrlist,`itemDef::cvarStrList'),

_SECT1(item-maxchars,maxChars &int;)
_P()
Maximum number of characters in an editfield.
<!-- Thanks, SweetnutZ -->
_P()
See also:
XREF(item-type,`itemDef::type'),
XREF(item-type-editfield,ITEM_TYPE_EDITFIELD),
XREF(item-maxpaintchars,`itemDef::maxPaintChars').

_SECT1(item-maxpaintchars,maxPaintChars &int;)
_P()
Maximum number of characters to show in an editfield.
<!-- Thanks, SweetnutZ -->
_P()
See also:
XREF(item-type,`itemDef::type'),
XREF(item-type-editfield,ITEM_TYPE_EDITFIELD),
XREF(item-maxchars,`itemDef::maxChars').

_SECT1(item-focussound,focusSound &string;)
_P()
Sound to play when item receives focus.
_P()
See also:
XREF(item-onfocus,`itemDef::onFocus'),
XREF(script-setfocus,`script::setfocus').

_SECT1(item-cvarfloat,cvarFloat &string; &float; &float; &float;)
_P()
Set a cvar to a float value.
The values correspond to:
OLIST(
LI([*Cvar name*])
LI([*Default value*])
LI([*Minimum value*])
LI([*Maximum value*])
)
_P()
This has commonly appeared in association with slider bars
("type ITEM_TYPE_SLIDER").
Best guess is that the lesser (left) extreme of the slider is assocated
with ``minimum'',
the greater (right) extreme associated with ``maximum'',
and the starting position of the slider at ``default''.
_P()
See also:
XREF(item-type,`itemDef::type'),
XREF(item-type-slider,ITEM_TYPE_SLIDER),
XREF(item-cvar,`itemDef::cvar').

_SECT1(item-cvarstrlist,cvarStrList { &string; &string; &lt; &string; &string; &lt; &string; &string; ... &gt; &gt; })
_P()
_ELIDE([*Creates an item that rotates through a list of values.*])
FROM_RFACTORY() Used in Multi item (ITEM_TYPE_MULTI) to rotate through a list of values.
Rotation occurs when the item is clicked (i.e. selecting).
The strings are provided in pairs.
The first of the pair is the string to display in the item when the pair is selected.
The second of the pair is the string to store in the cvar.
_P()
The cvar specified by `cvar' is used to store the second value of the selected pair.
_P()
Example:
LITERAL([*
cvarStrList { "Lightmap", "0", "Vertex Lighing", "1" }
*])
_P()
This example would rotate between two values.
The strings "Lightmap" and "Vertex Lighting" are shown, while the actual values "0" and "1" are assigned.
_P()
See also:
XREF(item-type,`itemDef::type'),
XREF(item-type-multi,ITEM_TYPE_MULTI),
XREF(item-cvar,`itemDef::cvar'),
XREF(item-cvarfloatlist,`itemDef::cvarFloatList').

_SECT1(item-cvarfloatlist,cvarFloatList { &string;, &float; &lt;, &string;, &float;, ...&gt; })
_P()
Works on the same principle as cvarStrList, except it stores float values instead of strings.
_P()
See also:
XREF(item-type,`itemDef::type'),
XREF(item-type-multi,ITEM_TYPE_MULTI),
XREF(item-cvar,`itemDef::cvar'),
XREF(item-cvarstrlist,`itemDef::cvarStrList').

_SECT1(item-addcolorrrange,addColorRange &float; &float; &color;)
_P()
Values are:
OLIST(
LI([*Low*])
LI([*High*])
LI([*Color value (RGBA)*])
)
_P()
Applies to ownerdraw elements that have an ``obvious'' numerical value, such as health, armor, and scores.
This keyword allows the ownerdraw element to be displayed in different colors depending on its numerical value.
If the numerical value falls within ``low'' and ``high'' (inclusive), the item uses the (foreground) color that is listed.
There can be as many uses of this statement as needed to cover the appropriate range of values, up to a hard limit of 10.
After 10, additional uses are ignored.
Note that this hardlimit can be changed in mods by mod authors.
If any ranges overlap, the range listed later takes precedence.
_P()
Usage is best described by an example.
LITERAL([*
itemDef {
  ownerdraw CG_PLAYER_HEALTH;
  addColorRange -999 24 1 0 0 1  //Red
  addColorRange  25 100 0 1 0 1  //Green
  addColorRange 101 999 1 1 1 1  //White
}
*])
_P()
The above draws the player's health.
If the health value is within -999 to 24 (inclusive), the health value shows in red.
If the health value is within 25 to 100 (inclusive), the health value shows in green.
101 and above (and up to 999), the health value shows in white.

_SECT1(item-ownerdrawflag,ownerdrawFlag &int;)
_P()
Asks for a flag value (true/false) from the Q3A engine,
and shows (on "true") or hides (on "false") the item based on the value.
If the item was already invisible ("visible 0"), this item is not drawn regardless of ownerdrawFlag.
Values for ownerdrawFlag are listed in XREF(values-cg-ownerdrawflag,Values for cgame ``ownerdrawFlag'')
_P()
See also:
XREF(values-cg-ownerdrawflag,Values for cgame ``ownerdrawFlag''),
XREF(values-ui-ownerdrawflag,Values for ui ``ownerdrawFlag''),
XREF(item-ownerdraw,`itemDef::ownerdraw'),
XREF(menu-ownerdrawflag,`menuDef::ownerdrawflag').

_SECT1(item-cinematic,cinematic &string;)
_P()
Play a RoQ move file in the confines of the item rect.
RoQ path name is indicated by the provided string.
_P()
See also:
XREF(menu-cinematic,`menuDef::cinematic'),
XREF(item-type,`itemDef::type'),
XREF(window-style-cinematic,WINDOW_STYLE_CINEMATIC).

_SECT1(item-cvartest,cvartest &string;)
_P()
Remembers this cvar's value for testing.
Test actions are carried out by other statements, below.
_P()
See also:
XREF(item-enablecvar,`itemDef::enableCvar'),
XREF(item-disablecvar,`itemDef::disableCvar'),
XREF(item-showcvar,`itemDef::showCvar'),
XREF(item-hidecvar,`itemDef::hideCvar').

_SECT1(item-enablecvar,enableCvar { &string; &lt;; &string; &lt;; &string; ... &gt; &gt; })
_P()
If the cvar value of `cvartest' contains any of the listed values, the item is enabled (selectable).
_P()
See also:
XREF(item-cvartest,`itemDef::cvartest'),
XREF(item-disablecvar,`itemDef::disableCvar'),
XREF(menu-disablecolor,`menuDef::disableColor').

_SECT1(item-disablecvar,disableCvar { &string; &lt;; &string; &lt;; &string; ... &gt; &gt; })
_P()
If the cvar value of `cvartest' contains any of the listed values, the item is disabled (unselectable).
_P()
See also:
XREF(item-cvartest,`itemDef::cvartest'),
XREF(item-enablecvar,`itemDef::enableCvar'),
XREF(menu-disablecolor,`menuDef::disableColor').

_SECT1(item-showcvar,showCvar { &string; &lt;; &string; &lt;; &string; ... &gt; &gt; })
_P()
If the cvar value of `cvartest' contains any of the listed values, the item is made visible.
_P()
See also:
XREF(item-cvartest,`itemDef::cvartest'),
XREF(item-hidecvar,`itemDef::hideCvar'),
XREF(script-show,`script::show').

_SECT1(item-hidecvar,hideCvar { &string; &lt;; &string; &lt;; &string; ... &gt; &gt; })
_P()
If the cvar value of `cvartest' contains any of the listed values, the item is made invisible (not drawn at all).
_P()
See also:
XREF(item-cvartest,`itemDef::cvartest'),
XREF(item-showcvar,`itemDef::showCvar'),
XREF(script-hide,`script::hide').


_SECT(script,Script actions)
_P()
The &q3ta; menu language has a very basic scripting language to effect changes in other menus or items.
Multiple statements are separated by semicolon (;).

_SECT1(script-fadein,fadein &string;)
_P()
Causes a fade-in effect for items/menus with names or groups matching the given string.
_P()
See also:
XREF(script-fadeout,`script::fadeout'),
XREF(menu-fadeclamp,`menuDef::fadeClamp'),
XREF(menu-fadeamount,`menuDef::fadeAmount'),
XREF(menu-fadecycle,`menuDef::fadeCycle'),
XREF(script-transition,`script::transition').

_SECT1(script-fadeout,fadeout &string;)
_P()
Causes a fade-out effect for items/menus with names or groups matching the given string.
XREF(script-fadein,`script::fadein'),
XREF(menu-fadeclamp,`menuDef::fadeClamp'),
XREF(menu-fadeamount,`menuDef::fadeAmount'),
XREF(menu-fadecycle,`menuDef::fadeCycle'),
XREF(script-transition,`script::transition').

_SECT1(script-show,show &string;)
_P()
Turns on visibility for items/menus with names or groups matching the given string.
_P()
See also:
XREF(script-hide,`script::hide'),
XREF(item-cvartest,`itemDef::cvartest'),
XREF(item-showcvar,`itemDef::showcvar'),
XREF(item-hidecvar,`itemDef::hidecvar').

_SECT1(script-hide,hide &string;)
_P()
Turns off visibility for items/menus with names or groups matching the given string.
_P()
See also:
XREF(script-show,`script::show'),
XREF(item-cvartest,`itemDef::cvartest'),
XREF(item-showcvar,`itemDef::showcvar'),
XREF(item-hidecvar,`itemDef::hidecvar').

_SECT1(script-open,open &string;)
_P()
Opens a menu with name matching the given string.
_P()
See also:
XREF(script-close,`script::close'),
XREF(menu-onopen,`menuDef::onOpen').

_SECT1(script-close,close &string;)
_P()
Closes a menu with name matching the given string.
_P()
See also:
XREF(script-open,`script::open'),
XREF(menu-onclose,`menuDef::onClose'),
XREF(menu-onesc,`menuDef::onEsc').

_SECT1(script-setasset,setasset &string;)
_P()
FROM_RFACTORY() Not used (ineffectual).
_DEVNOTE([*
Supposedly use asset with the given name, but the source code has as a no-op (empty function).
*])
_P()
See also:
XREF(item-asset_model,`itemDef::asset_model'),
XREF(item-asset_shader,`itemDef::asset_shader').

_SECT1(script-background,setbackground &string;)
_P()
Set/change background to the given shader name or filename.
_P()
See also:
XREF(menu-style,`menuDef::style'),
XREF(item-style,`itemDef::style'),
XREF(window-style-filled,WINDOW_STYLE_FILLED),
XREF(menu-background,`menuDef::background'),
XREF(item-background,`itemDef::background').

_SECT1(script-setteamcolor,setteamcolor &color;)
_P()
Changes the teamcolor used by "style WINDOW_STYLE_TEAMCOLOR".
_P()
See also:
XREF(menu-style,`menuDef::style'),
XREF(item-style,`itemDef::style'),
XREF(window-style-teamcolor,WINDOW_STYLE_TEAMCOLOR).

_SECT1(script-setitemcolor,setitemcolor &string; &string; &color;)
_P()
OLIST(
LI([*Item name to affect.*])
LI([*The string "backcolor", "forecolor", "bordercolor", depending on what to affect.*])
LI([*The new color to use.*])
)
_P()
See also:
XREF(item-backcolor,`itemDef::backcolor'),
XREF(item-forecolor,`itemDef::forecolor'),
XREF(item-bordercolor,`itemDef::borderColor').

_SECT1(script-setfocus,setfocus &string;)
_P()
Change focus to item/group with name matching the given string.
_P()
See also:
XREF(item-onfocus,`itemDef::onFocus'),

_SECT1(script-setplayermodel,setplayermodel &string;)
_P()
The cvar "team_model" is set to the given string.

_SECT1(script-setplayerhead,setplayerhead &string;)
_P()
The cvar "team_headmodel" is set to the given string.

_SECT1(script-transition,transition &string; &rect; &rect; &int; &float;)
_P()
Simple animation effect by altering the rect dimensions.
OLIST(
LI([*item/group name to affect.*])
LI([*starting dimensions.*])
LI([*ending dimensions.*])
LI([*lifetime of animation, in 1/10 seconds.*])
LI([*total number of steps to take (number of frames) animating.*])
)
_P()
See also:
XREF(menu-fadeclamp,menuDef::fadeClamp),
XREF(menu-fadeamount,menuDef::fadeAmount),
XREF(menu-fadecycle,menuDef::fadeCycle).

_SECT1(script-setcvar,setcvar &string; &string;)
_P()
First string is the name of the cvar to alter.
Second string is the value to assign to the cvar.
_P()
See also:
XREF(item-cvartest,`itemDef::cvartest').

_SECT1(script-exec,exec &string;)
_P()
Execute a string as a console command.
Note this is NOT the same "exec" to load a .cfg file.
To load a .cfg file in a menu script action, you can use:
LITERAL([*
exec "exec foo.cfg"
*])

_SECT1(script-play,play &string;)
_P()
Play the sound file or sound name indicated by the string.
_P()
See also:
XREF(script-playlooped,`script::playlooped'),
XREF(menu-soundloop,`menuDef::soundLoop').

_SECT1(script-playlooped,playlooped &string;)
_P()
Starts playing the sound in an infinite loop.
Use empty string ("") to stop loop.
_P()
See also:
XREF(script-play,`script::play'),
XREF(menu-soundloop,`menuDef::soundLoop').

_SECT1(script-orbit,orbit &string; &float; &float; &float; &int;)
_P()
Start an orbiting camera.
OLIST(
LI([*item to orbit (around(?))?*])
LI([*Start angle?*])
LI([*Delta (amount to change per step) angle?*])
LI([*Number of seconds to spend orbiting?*])
)
The angle values are assumed to be radian polar coordinates (distance, angle), as this makes the most sense in a rotation context that uses radian trigonometric functions.
For quick reference, 0 rad is 0 degress, 1.5707963267 is 90 degress, 3.1415926535 is 180 degress, 6.2431853070 is 360 degress.

_SECT1(script-uiScript,uiScript &string;)
_P()
Activates mod-specific actions based on string.
This action is a means to trigger activity coded in the C portion of the mod.
Valid parameters are mod-dependent, but those in the baseq3/q3ta source tree is provided.
_P()
See also:
XREF(values-uiscript,`Values for uiScript')


_SECT(values-item-type,Values for item ``type'')
_P()
These values are for
XREF(item-type,item `type')
field.
_P()
Determines a partcular behavior for an item.

_SECT1(item-type-text,0 ITEM_TYPE_TEXT)
_P()
Text label widget
(this item type is everywhere).
Just displays a text string with no special action.
This type is also the default if a particular type isn't explicitly set.
_P()
See also:
XREF(item-textscale,`itemDef::textscale'),
XREF(item-textalign,`itemDef::textalign'),
XREF(item-textalignx,`itemDef::textalignx'),
XREF(item-textaligny,`itemDef::textaligny'),
XREF(item-textstyle,`itemDef::textstyle'),
XREF(item-forecolor,`itemDef::forecolor'),
XREF(item-wrapped,`itemDef::wrapped'),
XREF(item-autowrapped,`itemDef::autowrapped'),
XREF(item-decoration,`itemDef::decoration').

_SECT1(item-type-button,1 ITEM_TYPE_BUTTON)
_P()
A pushbutton widget.
A mouse click inside of the item rect triggers the "action" script.
_P()
See also:
XREF(item-type,`itemDef::type'),
XREF(item-action,`itemDef::action'),
XREF(item-onfocus,`itemDef::onFocus'),
XREF(item-leavefocus,`itemDef::leaveFocus'),
XREF(item-mouseenter,`itemDef::mouseEnter'),
XREF(item-mouseexit,`itemDef::mouseExit'),
XREF(item-text,`itemDef::text'),
XREF(item-forecolor,`itemDeF::forecolor'),
XREF(menu-focuscolor,`itemDef::focuscolor'),
XREF(menu-disablecolor,`itemDef::disablecolor').

_SECT1(item-type-radiobutton,2 ITEM_TYPE_RADIOBUTTON)
_P()
FROM_RFACTORY() Not used.
_DEVNOTE([*
Not implemented yet.
Radio button widget.
Radio buttons are linked by their "group" name.
Only one button of a radio button group may be selected.
Selecting one radio button in a group causes all other buttons in the same group to deselect.
*])
_P()
See also:
XREF(item-type,`itemDef::type'),
XREF(item-type-text,ITEM_TYPE_TEXT),
XREF(item-cvar,`itemDef::cvar'),
XREF(item-group,`itemDef::group'),
XREF(item-onfocus,`itemDef::onFocus'),
XREF(item-leavefocus,`itemDef::leaveFocus'),
XREF(item-mouseenter,`itemDef::mouseEnter'),
XREF(item-mouseexit,`itemDef::mouseExit'),
XREF(item-text,`itemDef::text'),
XREF(item-forecolor,`itemDeF::forecolor'),
XREF(menu-focuscolor,`itemDef::focuscolor'),
XREF(menu-disablecolor,`itemDef::disablecolor').

_SECT1(item-type-checkbox,3 ITEM_TYPE_CHECKBOX)
_P()
FROM_RFACTORY() Not used.
_DEVNOTE([*
Checkbox widget.
The traditional "yes/no" marker.
Values can be stored in a cvar with the `cvar' field:
"1" is assigned on a "yes" mark,
"0" is assigned on a "no" mark.
*])
_P()
See also:
XREF(item-type,`itemDef::type'),
XREF(item-type-text,ITEM_TYPE_TEXT),
XREF(item-cvar,`itemDef::cvar'),
XREF(item-group,`itemDef::group'),
XREF(item-onfocus,`itemDef::onFocus'),
XREF(item-leavefocus,`itemDef::leaveFocus'),
XREF(item-mouseenter,`itemDef::mouseEnter'),
XREF(item-mouseexit,`itemDef::mouseExit'),
XREF(item-text,`itemDef::text'),
XREF(item-forecolor,`itemDeF::forecolor'),
XREF(menu-focuscolor,`itemDef::focuscolor'),
XREF(menu-disablecolor,`itemDef::disablecolor').

_SECT1(item-type-editfield,4 ITEM_TYPE_EDITFIELD)
_P()
A text-entry widget.
Value can be stored to a cvar with the `cvar' field.
_P()
See also:
XREF(item-type,`itemDef::type'),
XREF(item-type-text,ITEM_TYPE_TEXT),
XREF(item-cvar,`itemDef::cvar'),
XREF(item-maxchars,`itemDef::maxChars'),
XREF(item-maxpaintchars,`itemDef::maxPaintChars'),
XREF(item-onfocus,`itemDef::onFocus'),
XREF(item-leavefocus,`itemDef::leaveFocus'),
XREF(item-mouseenter,`itemDef::mouseEnter'),
XREF(item-mouseexit,`itemDef::mouseExit'),
XREF(item-text,`itemDef::text'),
XREF(item-forecolor,`itemDeF::forecolor'),
XREF(menu-focuscolor,`itemDef::focuscolor'),
XREF(menu-disablecolor,`itemDef::disablecolor').

_SECT1(item-type-combo,5 ITEM_TYPE_COMBO)
_P()
_ELIDE([*XXX no idea.*])
FROM_RFACTORY() Not used.
_DEVNOTE([*
Not implemented yet.
A combo box is also known as a drop-down list or pop-up list.
The combo box normally appears as a single-line text.
Clicking on the combo box shows/opens a list from which an item can be selected.
The list disppears/closes to show the new item in the original rect.
Combo boxes may optionally allow the text to be edited, thereby relegating the list to a a base/shortcut/common-case selector.
*])

_SECT1(item-type-listbox,6 ITEM_TYPE_LISTBOX)
_P()
Listbox widget.
Creates a box with many items listed inside.
Multiple items can be selected.
Source of items to list is indicated by "feeder" statement.
_ELIDE([*
XXX Multiple-selection ability can be disabled? If so, how?
*])
_P()
See also:
XREF(item-type,`itemDef::type'),
XREF(item-feeder,`itemDef::feeder'),
XREF(item-elementheight,`itemDef::elementheight'),
XREF(item-elementwidth,`itemDef::elementwidth'),
XREF(item-columns,`itemDef::columns'),
XREF(item-horizontalscroll,`itemDef::horizontalscroll'),
XREF(item-notselectable,`itemDef::notselectable'),


_SECT1(item-type-model,7 ITEM_TYPE_MODEL)
_P()
Draw a Q3A 3D model.
Model name is provided in a XREF(item-asset_model,`asset_model') field.
_P()
See also:
XREF(item-type,`itemDef::type'),
XREF(item-asset_model,`itemDef::asset_model'),
XREF(script-setasset,`script::setasset').

_SECT1(item-type-ownderdraw,8 ITEM_TYPE_OWNERDRAW)
_P()
Draw engine-supplied item (shader, model, health, flag status, etc.).
_P()
See also:
XREF(item-type,`itemDef::type'),
XREF(values-cg-ownerdraw,Values for cgame ``ownerdraw''),
XREF(values-cg-ownerdrawflag,Values for cgame ``ownerdraw''),
XREF(values-ui-ownerdraw,Values for ui ``ownerdraw''),
XREF(values-ui-ownerdrawflag,Values for ui ``ownerdrawflag'').

_SECT1(item-type-numericfield,9 ITEM_TYPE_NUMERICFIELD)
_P()
Text-entry widget restricted to only numerical characters.
An example cvar where this type is attached to is sv_maxClients (the maximal number of players allowed to connect simultaneously).
_P()
See also:
XREF(item-type,`itemDef::type'),
XREF(item-cvar,`itemDef::cvar'),
XREF(item-type-editfield,`itemDef::editField').

_SECT1(item-type-slider,10 ITEM_TYPE_SLIDER)
_P()
A slider widget, such as for volume.
The minimum and maximum values, along with starting slider value, are provided in a `cvarFloat' statement.
_P()
See also:
XREF(item-type,`itemDef::type'),
XREF(item-cvar,`itemDef::cvar'),
XREF(item-cvarfloat,`itemDef::cvarFloat').

_SECT1(item-type-yesno,11 ITEM_TYPE_YESNO)
_P()
Pre-packaged dialog box that has a "Yes" and a "No" button.
Relieves the burden of having to specify all other elements to create a simple yes/no dialog window.
Result is stored in the cvar indicated by the `cvar' field, 1 for yes, 0 for no.
XXX: verify
_P()
See also:
XREF(item-type,`itemDef::type'),
XREF(item-cvar,`itemDef::cvar').

_SECT1(item-type-multi,12 ITEM_TYPE_MULTI)
_P()
Multi-item widget.
Coupled with "cvarStrList" or "cvarFloatList", clicking on the item rotates through the available values/strings.
_P()
See also:
XREF(item-type,`itemDef::type'),
XREF(item-cvar,`itemDef::cvar'),
XREF(item-cvarstrlist,`itemDef::cvarStrList'),
XREF(item-cvarfloatlist,`itemDef::cvarFloatList').

_SECT1(item-type-bind,13 ITEM_TYPE_BIND)
_P()
When the item is selected, Q3A enters a special state that traps keystrokes in order to bind it.
The action to bind to the key is indicated by the `cvar' field (e.g. cvar "+forward").
The `text' field provides the prompt (e.g. text "Move forward:").
_P()
See also:
XREF(item-type,`itemDef::type'),
XREF(item-type-text,`ITEM_TYPE_TEXT'),
XREF(item-cvar,`itemDef::cvar').


_SECT(values-style,Values for ``style'')
_P()
These are the values that can be used for the
XREF(menu-style,menu `style')
field or
XREF(item-style,item `style')
field.
Either the numeric value or the name (without quotes) can be used.

_SECT1(window-style-empty,0 WINDOW_STYLE_EMPTY)
_P()
Don't add anything special.

_SECT1(window-style-filled,1 WINDOW_STYLE_FILLED)
_P()
Solid fill with `backcolor', adding any fade effects parameterized in `fadeClamp', `fadeCycle', `fadeAmount'.
_P()
See also:
XREF(item-backcolor,`itemDef::backcolor'),
XREF(menu-backcolor,`menuDef::backcolor'),
XREF(menu-fadeclamp,`menuDef::fadeClamp'),
XREF(menu-fadeamount,`menuDef::fadeAmount'),
XREF(menu-fadecycle,`menuDef::fadeCycle').

_SECT1(window-style-gradient,2 WINDOW_STYLE_GRADIENT)
_P()
Gradient effect with `backcolor'.

_SECT1(window-style-shader,3 WINDOW_STYLE_SHADER)
_P()
Fill with shader indicated in `background'.
_P()
See also:
XREF(item-background,`itemDef::background'),
XREF(menu-background,`menuDef::background').

_SECT1(window-style-teamcolor,4 WINDOW_STYLE_TEAMCOLOR)
_P()
Fill with team color at 33% alpha.
_P()
See also:
XREF(script-setteamcolor,`script::setteamcolor').

_SECT1(window-style-cinematic,5 WINDOW_STYLE_CINEMATIC)
_P()
Fill with cinematic (movie, RoQ format).
_P()
See also:
XREF(item-cinematic,`itemDef::cinematic').


_SECT(values-border,Values for ``border'')
_P()
These values can be used for either the the
XREF(menu-border,menu `border')
field or
XREF(item-border,item `border')
field.
You can use either the numeric value or the name (without quotes).
Borders are drawn within the boundaries of a menu/item, and the available space within shrinks according to the border size.

_SECT1(border-none,0 WINDOW_BORDER_NONE)
_P()
No border is drawn.

_SECT1(border-full,1 WINDOW_BORDER_FULL)
_P()
Borders are drawn along the top, bottom, left, and right edges.

_SECT1(border-horz,2 WINDOW_BORDER_HORZ)
_P()
Draw only along the top and bottom (horizontal) edges.

_SECT1(border-vert,3 WINDOW_BORDER_VERT)
_P()
Draw only along the left and right (vertical) edges.

_SECT1(border-kcgradient,4 WINDOW_BORDER_KCGRADIENT)
_P()
Draw only along the top and bottom edges with the KC (Kevin Cloud?) Gradient effect.


_SECT(values-textstyle,Values for ``textstyle'')
_P()
These values are used for the
XREF(item-textstyle,item `textstyle')
field.
Either the numeric or name value can be used.

_SECT1(texstyle-normal,0 ITEM_TEXTSTYLE_NORMAL)
_P()
Normal, solid text.

_SECT1(textstyle-blink,1 ITEM_TEXTSTYLE_BLINK)
_P()
Fast blinking; roughly two cycles per second (2 Hz).

_SECT1(textstyle-pulse,2 ITEM_TEXTSTYLE_PULSE)
_P()
FROM_RFACTORY() Not used.
_DEVNOTE([*
Not implemented?
Slow blinking, pulsing effect; roughly two seconds per cycle (0.5 Hz).
*])

_SECT1(textstyle-shadowed,3 ITEM_TEXTSTYLE_SHADOWED)
_P()
Drop-shadow effect.

_SECT1(textstlye-outlined,4 ITEM_TEXTSTYLE_OUTLINED)
_P()
FROM_RFACTORY() Not used.
_DEVNOTE([*
Not implemented yet.
Outline effect.
*])

_SECT1(textstyle-outlineshadowed,5 ITEM_TEXTSTYLE_OUTLINESHADOWED)
_P()
FROM_RFACTORY() Not used.
_DEVNOTE([*
Not implemented yet.
Combined shadow and outline effect.
*])

_SECT1(textstyle-shadowedmore,6 ITEM_TEXTSTYLE_SHADOWEDMORE)
_P()
FROM_RFACTORY() Not used.
_DEVNOTE([*
Not implemented yet.
Extra shadow effect.
*])


_SECT(values-feeder,Values for ``feeder'')
_P()
These values can be used for the
XREF(item-feeder,item `feeder')
field, used to fill up a listbox item.
Most feeders supply one item per line.
Some are multi-columned, such as in-game players listing.
For the most part, you can safely assume a feeder is single-columned (one item per line), unless otherwise indicated.

_SECT1(feeder-heads,0 FEEDER_HEADS)
_P()
List of Q3A head models used in the game.
_ELIDE([*(image?)*])
FROM_RFACTORY() Can be texts or images.

_SECT1(feeder-maps,1 FEEDER_MAPS)
_P()
List of names of available Q3A maps (levels) for single-player mode.
Text-only.
_ELIDE([*(text?)*])
_P()
See also:
XREF(feeder-allmaps,FEEDER_ALLMAPS)

_SECT1(feeder-servers,2 FEEDER_SERVERS)
_P()
List of Q3A servers.
Consists of the following columns:
OLIST(
LI([*Host name*])
LI([*Map name*])
LI([*Number of clients connected*])
LI([*Gametype*])
LI([*Ping*])
)
_P()
(text)
_P()
See also:
XREF(feeder-serverstatus,FEEDER_SERVERSTATUS),
XREF(uiScript-RefreshServers,uiScript::RefreshServers)

_SECT1(feeder-clans,3 FEEDER_CLANS)
_P()
<!-- List of Q3TA clans (team names). (text?) -->
FROM_RFACTORY() Not used.

_SECT1(feeder-allmaps,4 FEEDER_ALLMAPS)
_P()
List of all Q3A maps playable for an online game, according to gametype.
_ELIDE([*(text?)*])
FROM_RFACTORY() Can be texts or images.
_P()
See also:
XREF(feeder-maps,FEEDER_MAPS),
XREF(uiScript-loadArenas,uiScript::loadArenas)

_SECT1(feeder-redteam-list,5 FEEDER_REDTEAM_LIST)
_P()
FROM_RFACTORY() Not used.
_DEVNOTE([*
Not implemented?
Scores listing of red team.
Consists of seven columns per player/line:
OLIST([*
LI([*Player's handicap value if any, flag (red, blue, white) instead if have flag.*])
LI([*Team Leader icon (an "L") if player is team leader.*])
LI([*"Ready" indicator at intermission; wins/losses in tournament mode; "Spectator" if spectating; "Leader" string.*])
LI([*Player's name*])
LI([*Player's score*])
LI([*Player's time spent playing in minutes.*])
LI([*ping time, or "connecting" string.*])
*])
*])dnl devnote
_P()
(text)

_SECT1(feeder-blueteam-list,6 FEEDER_BLUETEAM_LIST)
_P()
FROM_RFACTORY() Not used.
_DEVNOTE([*
Not implemented?
Scores listing of blue team.
Consists of seven columns per player/line:
OLIST([*
LI([*Player's handicap value if any, flag (red, blue, white) instead if have flag.*])
LI([*Team Leader icon (an "L") if player is team leader.*])
LI([*"Ready" indicator at intermission; wins/losses in tournament mode; "Spectator" if spectating; "Leader" string.*])
LI([*Player's name*])
LI([*Player's score*])
LI([*Player's time spent playing in minutes.*])
LI([*ping time, or "connecting" string.*])
*])
*])dnl devnote
_P()
(text)


_SECT1(feeder-player-list,7 FEEDER_PLAYER_LIST)
_P()
List of all players in the game.
Text-only.

_SECT1(feeder-team-list,8 FEEDER_TEAM_LIST)
_P()
List of all teams in the game.
Text-only.

_SECT1(feeder-mods,9 FEEDER_MODS)
_P()
List of available Q3A mods.
Text-only.
_P()
See also:
XREF(uiScript-LoadMods,uiScript::LoadMods),
XREF(uiScript-RunMod,uiScript::RunMod)

_SECT1(feeder-demos,10 FEEDER_DEMOS)
_P()
List of available recorded demos (file names).
Text-only.
_P()
See also:
XREF(uiScript-LoadDemos,uiScript::LoadDemos),
XREF(uiScript-RunSPDemo,uiScript::RunSPDemo)

_SECT1(feeder-scoreboard,11 FEEDER_SCOREBOARD)
_P()
FROM_RFACTORY() Not used.
_DEVNOTE([*
Not implementd?
Scoreboard listing (non-team game?)
(text? mixed?)
*])

_SECT1(feeder-q3heads,12 FEEDER_Q3HEAD)
_P()
List of all available Q3A head models.
FROM_RFACTORY() Can be text or image.

_SECT1(feeder-serverstatus,13 FEEDER_SERVERSTATUS)
_P()
A listing showing the server's players over a remote query (out-of-game, as from server browser).
Consists of the following columns:
OLIST(
LI([*client number*])
LI([*client score*])
LI([*client ping*])
LI([*client name*])
)
_P()
(text)
_P()
See also:
XREF(feeder-servers,FEEDER_SERVERS),
XREF(uiScript-ServerStatus,uiScript::ServerStatus),
XREF(uiScript-FoundPlayerServerStatus,uiScript::FoundPlayerServerStatus)

_SECT1(feeder-findplayer,14 FEEDER_FINDPLAYER)
_P()
List of servers containing the player name for which you are searching.
(text)

_SECT1(feeder-cinematics,15 FEEDER_CINEMATICS)
_P()
List of available cinematics (RoQ files).
(text?)
List is updated by uiScript ``LoadMovies''.
_P()
See also:
XREF(uiScript-LoadMovies,uiScript::LoadMovies),
XREF(uiScript-playMovie,uiScript::playMovie)



_SECT(values-cg-ownerdraw,Values for cgame ``ownerdraw'')
_P()
These are the values for the
XREF(menu-ownerdraw,menu `ownerdraw')
or
XREF(item-ownerdraw,item `ownerdraw')
field.
This set of values is used in the cgame menu, aka
XREF(hud,Heads-Up Display (HUD)).

_SECT1(cg-ownerdraw-base,0 CG_OWNERDRAW_BASE)
_P()
ALL YOUR BASE ARE BELONG TO US.

_SECT1(cg-player-armor-icon,1 CG_PLAYER_ARMOR_ICON)
_P()
Armor icon for the player (red or yellow), as image.

_SECT1(cg-player-armor-value,2 CG_PLAYER_ARMOR_VALUE)
_P()
Armor value, as numeric text.

_SECT1(cg-player-head,3 CG_PLAYER_HEAD)
_P()
The player's head model, as 3D model.

_SECT1(cg-player-health,4 CG_PLAYER_HEALTH)
_P()
The player's health, as numeric text.

_SECT1(cg-ammo-icon,5 CG_PLAYER_AMMO_ICON)
_P()
Icon of the ammo currently being used (matched up to the weaon in hand), as image.

_SECT1(cg-ammo-value,6 CG_PLAYER_AMMO_VALUE)
_P()
Ammo count, as numeric text.

_SECT1(cg-selectedplayer-head,7 CG_SELECTEDPLAYER_HEAD)
_P()
Head model of the currently selected player, as 3D model.
<!-- XXX xref selectedplayer info -->

_SECT1(cg-selectedplayer-name,8 CG_SELECTEDPLAYER_NAME)
_P()
Name as the currently selected player, as text.
<!-- XXX xref selectedplayer info -->

_SECT1(cg-selectedplayer-location,9 CG_SELECTEDPLAYER_LOCATION)
_P()
Location of the currently selected player, as text.
<!-- XXX xref selectedplayer info -->

_SECT1(cg-selectedplayer-status,10 CG_SELECTEDPLAYER_STATUS)
_P()
Status (Attack, Defend, Escort, etc.) of currently selected player, as image.
<!-- XXX xref selectedplayer info -->

_SECT1(cg-selectedplayer-weapon,11 CG_SELECTEDPLAYER_WEAPON)
_P()
FROM_RFACTORY() Not used.
_DEVNOTE([*
Weapon wielded by currently selected player, as image.
*])
<!-- XXX xref selectedplayer info -->

_SECT1(cg-selectedplayer-head,12 CG_SELECTEDPLAYER_POWERUP)
_P()
Powerup held by currently selected player, as image.
<!-- XXX xref selectedplayer info -->

_SECT1(cg-selectedplayer-head,40 CG_SELECTEDPLAYER_ARMOR)
_P()
Armor value of currently selected player, as numeric text.
<!-- XXX xref selectedplayer info -->

_SECT1(cg-selectedplayer-head,41 CG_SELECTEDPLAYER_HEALTH)
_P()
Health value of currently selected player, as numeric text.
<!-- XXX xref selectedplayer info -->

_SECT1(cg-flagcarrier-head,13 CG_FLAGCARRIER_HEAD)
_P()
FROM_RFACTORY() Not used.

_DEVNOTE([*
Not implemented yet.
Head model of flag carrier, as 3D model.
Note that flag carrier means "whoever on your own team that has stolen the/a flag", and not that of the other team's.
*])

_SECT1(cg-flagcarrier-name,14 CG_FLAGCARRIER_NAME)
_P()
FROM_RFACTORY() Not used.
_DEVNOTE([*
Not implemented yet.
Name of flag carrier, as text.
*])

_SECT1(cg-flagcarrier-location,15 CG_FLAGCARRIER_LOCATION)
_P()
FROM_RFACTORY() Not used.
_DEVNOTE([*
Not implemented yet.
Location of flag carrier, as text.
*])

_SECT1(cg-flagcarrier-status,16 CG_FLAGCARRIER_STATUS)
_P()
FROM_RFACTORY() Not used.
_DEVNOTE([*
Not implemented yet.
Status of flag carrier, as image.
*])

_SECT1(cg-flagcarrier-weapon,17 CG_FLAGCARRIER_WEAPON)
_P()
FROM_RFACTORY() Not used.
_DEVNOTE([*
Not implemented yet.
Weapon wielded by flag carrier, as image.
*])

_SECT1(cg-flagcarrier-powerup,18 CG_FLAGCARRIER_POWERUP)
_P()
FROM_RFACTORY() Not used.
_DEVNOTE([*
Not implemented yet.
Powerup held by the flag carrier, as image.
*])

_SECT1(cg-player-item,19 CG_PLAYER_ITEM)
_P()
FROM_RFACTORY() Item currently held by player, as image.

_SECT1(cg-player-score,20 CG_PLAYER_SCORE)
_P()
Player's score, as numeric text.

_SECT1(cg-blue-flaghead,21 CG_BLUE_FLAGHEAD)
_P()
Head model of red team member carrying the blue flag, as 3D model.

_SECT1(cg-blue-flagstatus,22 CG_BLUE_FLAGSTATUS)
_P()
Status (Attack, Defend, Retrieve, etc.) of red team member carrying the blue flag, as image.

_SECT1(cg-blue-flaghead,23 CG_BLUE_FLAGNAME)
_P()
Name of red team member carrying the blue flag, as text.

_SECT1(cg-red-flaghead,24 CG_RED_FLAGHEAD)
_P()
Head model of the blue team member carrying the red flag, as image.

_SECT1(cg-red-flagstatus,25 CG_RED_FLAGSTATUS)
_P()
2D icon of the red flag's status, as image.
Status is "at stand", "dropped", or "stolen".

_SECT1(cg-red-flagname,26 CG_RED_FLAGNAME)
_P()
Name of the blue team member carrying the red flag, as text.

_SECT1(cg-blue-score,27 CG_BLUE_SCORE)
_P()
Blue team's score, as numeric text.

_SECT1(cg-red-score,28 CG_RED_SCORE)
_P()
Red team's score, as numeric text.

_SECT1(red-name,29 CG_RED_NAME)
_P()
Red team's name (clan name), as text.

_SECT1(blue-name,30 CG_BLUE_NAME)
_P()
Blue team's name (clan name), as text.

_SECT1(cg-harvester-skulls,31 CG_HARVESTER_SKULLS)
_P()
Number of skulls collected in Harvester mode, as numeric text.

_SECT1(cg-oneflag-status,32 CG_ONEFLAG_STATUS)
_P()
Status of the flag in one-flag mode (at stand, stolen, dropped), as image(?).

_SECT1(cg-player-location,33 CG_PLAYER_LOCATION)
_P()
Location of player, as text.

_SECT1(cg-team-color,34 CG_TEAM_COLOR)
_P()
Player's team color (e.g. for filling in a rect background color), as color.

_SECT1(cg-ctf-powerup,35 CG_CTF_POWERUP)
_P()
Q3TA CTF persistent powerup held by player, as image.

_SECT1(cg-area-powerup,36 CG_AREA_POWERUP)
_P()
Player's powerup in hand in CTF mode, as image.

_SECT1(cg-area-lagometer,37 CG_AREA_LAGOMETER)
_P()
FROM_RFACTORY() Not used.
_DEVNOTE([*
Not implemented yet.
Draw lagometer, as (animated) image.
The current lagometer uses the old drawing functions, drawn at a fixed location.
*])

_SECT1(cg-player-hasflag,38 CG_PLAYER_HASFLAG)
_P()
Draws the flag if the player has it, as image.
For the old-timers, this correlates to the flag icon appearing when you steal the flag
With simpleItems, this draws the 2D flag icon.
Otherwise it draws the rotating 3D model of the flag.

_SECT1(cg-game-type,39 CG_GAME_TYPE)
_P()
Game type ("CTF", "One Flag", "Harvester", etc.), as text.

_SECT1(cg-player-status,42 CG_PLAYER_STATUS)
_P()
Player status (Attack, Defend, Escort, etc.), as image.

_SECT1(cg-fragged-msg,43 CG_FRAGGED_MSG)
_P()
FROM_RFACTORY() Not used.
_DEVNOTE([*
Not implemented yet (empty function).
Probably the "You fragged ..." message, as text.
*])

_SECT1(cg-proxmined-msg,44 CG_PROXMINED_MSG)
_P()
&q3ta; proximity mine message, as text.

_SECT1(cg-area-fpsinfo,45 CG_AREA_FPSINFO)
_P()
FROM_RFACTORY() Not used.
_DEVNOTE([*
Not implemented yet.
FPS info ("## fps"), as text.
The current FPS info display uses the old draw functions, drawn at a fixed location.
*])

_SECT1(cg-area-systemchat,46 CG_AREA_SYSTEMCHAT)
_P()
FROM_RFACTORY() Not used.
_DEVNOTE([*
Not completed yet.
All system (non-chat) messages?
*])

_SECT1(cg-area-chat,47 CG_AREA_CHAT)
_P()
FROM_RFACTORY() Not used.
_DEVNOTE([*
Not completed yet.
Global (non-team?) chat texts.
*])

_SECT1(cg-area-teamchat,48 CG_AREA_TEAMCHAT)
_P()
FROM_RFACTORY() Not used.
_DEVNOTE([*
Not completed yet.
Team-only chat texts.
*])

_SECT1(cg-game-status,49 CG_GAME_STATUS)
_P()
In single player mode, ranking information (e.g. "5th place with -4 frags"), as text.
In team game, team rankings (e.g. "Red leads Blue, 42 to 17"), as text.

_SECT1(cg-killer,50 CG_KILLER)
_P()
Name as text of the last player to kill you, as text.

_SECT1(cg-player-armor-icon2d,51 CG_PLAYER_ARMOR_ICON2D)
_P()
Draw armor icon, as image.
_ELIDE([*
If simpleItems is on, this item draws the 2D armor icon,
otherwise the item displays the rotating 3D armor model.
*])
FROM_RFACTORY() 2D image only.

_SECT1(cg-player-ammo-icon2d,52 CG_PLAYER_AMMO_ICON2D)
_P()
Draw ammo icon for current weapon, as image.
_ELIDE([*
With simpleItems, this draws the ammo's 2D icon,
otherwise the rotating 3D ammo model.
*])
FROM_RFACTORY() 2D image only.

_SECT1(cg-accuracy,53 CG_ACCURACY)
_P()
Accuracy score, icon + text (e.g. "34%")

_SECT1(cg-assists,54 CG_ASSISTS)
_P()
Assists score, icon + text (e.g. "12")

_SECT1(cg-defend,55 CG_DEFEND)
_P()
Defense score, icon + text (e.g. "8")

_SECT1(cg-excellent,56 CG_EXCELLENT)
_P()
Excellents score, icon + text (e.g. "3")

_SECT1(cg-impressive,57 CG_IMPRESSIVE)
_P()
Impressives score, icon + text (e.g. "2")

_SECT1(cg-perfect,58 CG_PERFECT)
_P()
Perfects score, icon + text (e.g. "0")

_SECT1(cg-gauntlet,59 CG_GAUNTLET)
_P()
Humiliations score, icon + text (e.g. "5")

_SECT1(cg-spectators,60 CG_SPECTATORS)
_P()
Marquee-effect (scrolling-to-left text) of players in spectator mode, as (scrolling) text.

_SECT1(cg-teaminfo,61 CG_TEAMINFO)
_P()
The Team Info Overlay display, as image + text combination.

_SECT1(cg-voice-head,62 CG_VOICE_HEAD)
_P()
Head model of the last player that sent a voice message, as image.

_SECT1(cg-voice-name,63 CG_VOICE_NAME)
_P()
Name of the last player that sent a voice message, as text.

_SECT1(cg-player-hasflag2d,64 CG_PLAYER_HASFLAG2D)
_P()
Flag icon when the player has the flag, as image.
With simpleItems, this draws the flat 2D icon of the flag.
Otherwise, it draws the rotating 3D flag model.
For the time being, this is does the exact same thing as CG_PLAYER_HASFLAG.
Presumably the two will either merge or take separate meanings in the future.

_SECT1(cg-harvester-skulls2d,65 CG_HARVESTER_SKULLS2D)
_P()
_ELIDE([*
unsure.
The skulls icons?
*])
The skulls icon, as image.

_SECT1(cg-capfraglimit,66 CG_CAPFRAGLIMIT)
_P()
Either the frags limit or captures limit of the game, according to game type, as text.

_SECT1(cg-1stplace,67 CG_1STPLACE)
_P()
For individuals-based gametypes (Free-For-All, Tournament), the highest score, as numeric text.
For team games (TDM, CTF), score of red team, as numeric text.
Nothing/blank in single-player mode.

_SECT1(cg-2ndplace,68 CG_2NDPLACE)
_P()
For individuals-based gametypes (Free-For-All, Tournament), the second-highest score, as text.
For team games (TDM, CTF), score of blue team, as text.
Nothing/blank in single-player mode.

_SECT1(cg-captured,69 CG_CAPTURES)
_P()
Number of captures (icon + text) by player.



_SECT1(cg-extra,70 CG_EXTRA)
_P()
Specific to &wfa;.
Shows the class-specific special equipments in use, such as lasers, sentries, depots, and alarms.

_SECT1(cg-pointstatus,71 CG_POINTSTATUS)
_P()
Specific to &wfa;.
Draws the status of the command points in Command Point gametype.
Command Point involves at least three control points that must be conquered and held by a team.  A team gains some a score point per second per command point in its control.  Game ends when a team reaches the score limit.

_SECT1(cg-headshots,72 CG_HEADSHOTS)
_P()
Specific to &wfa;.
Number of headshots (icon + text) by player.


_SECT(values-cg-ownerdrawflag,Values for cgame ``ownerdrawflag'')
_P()
These values can be used for the
XREF(item-ownerdrawflag,item `ownerdrawflag')
field,
to control the appearance of an
XREF(item-ownerdraw,`ownerdraw')
content depending on an engine-dependent value.
A ``false'' result causes the item to remain invisible,
while a ``true'' result procedes with drawing the content.
These ownerdrawFlag values are used for the cgame menu, aka
XREF(hud,Heads-Up Display (HUD)).
For convenience, the condition for a true result is listed, while false is assumed if the listed condition is not met.
The description can be prefixed with ``Draw this when/if...'' to help clear up confusion.

_SECT1(cg-show-blue-team-has-redflag, CG_SHOW_BLUE_TEAM_HAS_REDFLAG)
_P()
... blue team has the red flag.

_SECT1(cg-show-red-team-has-blueflag, CG_SHOW_RED_TEAM_HAS_BLUEFLAG)
_P()
... red team has the blue flag.

_SECT1(cg-show-anyteamgame, CG_SHOW_ANYTEAMGAME)
_P()
... in a team-based game mode (TDM, 1CTF, 2CTF, etc.)

_SECT1(cg-show-harvester, CG_SHOW_HARVESTER)
_P()
... in Harvester game mode only.

_SECT1(cg-show-oneflag, CG_SHOW_ONEFLAG)
_P()
... in One-flag CTF game mode only.

_SECT1(cg-show-ctf, CG_SHOW_CTF)
_P()
... in Two-flag (traditional) CTF game mode only.

_SECT1(cg-show-obelisk, CG_SHOW_OBELISK)
_P()
... in Obelisk (Overload?) game mode.
_ELIDE([*NL()XXX What is this, Overload?*])

_SECT1(cg-show-healthcritical, CG_SHOW_HEALTHCRITICAL)
_P()
... health is critically low (&lt;25).
Default HUD uses this to make the health HUD flash on low health.

_SECT1(cg-show-singleplayer, CG_SHOW_SINGLEPLAYER)
_P()
... in Single-Player game (as opposed to a networked game).

_SECT1(cg-show-tournament, CG_SHOW_TOURNAMENT)
_P()
... in Tournament game mode only.

_SECT1(cg-show-duringincomingvoice, CG_SHOW_DURINGINCOMINGVOICE)
_P()
... a radio message comes in (Q3TA-style voice command/chat).

_SECT1(cg-show-if-player-has-flag, CG_SHOW_IF_PLAYER_HAS_FLAG)
_P()
... player has the flag.
This is useful for showing a special icon only when the player him/herself has the flag.

_SECT1(cg-show-lanplayonly, CG_SHOW_LANPLAYONLY)
_P()
... in Networked game (as opposed to single-player or local multiplayer [bots]).
The lagometer is an example of where this is meaningful.

_SECT1(cg-show-mined, CG_SHOW_MINED)
_P()
... mine(s) has been placed (TA-style mines).

_SECT1(cg-show-healthok, CG_SHOW_HEALTHOK)
_P()
... health is OK, i.e. non-critical (&gt;25).

_SECT1(cg-show-teaminfo, CG_SHOW_TEAMINFO)
_P()
... Team Info is being selected/shown (teammate is not selected).
NL()XXX need section on selectedplayer information

_SECT1(cg-show-noteaminfo, CG_SHOW_NOTEAMINFO)
_P()
... Team Info is not being selected/shown (teammate is selected).
NL()XXX again, need section on selectedplayer

_SECT1(cg-show-otherteamhasflag, CG_SHOW_OTHERTEAMHASFLAG)
_P()
... other team has the/your flag (CTF, one-flag).

_SECT1(cg-show-yourteamhasenemyflag, CG_SHOW_YOURTEAMHASENEMYFLAG)
_P()
... your team as the/their flag (CTF, one-flag).

_SECT1(cg-show-anynonteamgame, CG_SHOW_ANYNONTEAMGAME)
_P()
... in any non-team-based games (FFA, tournament, etc.).

_SECT1(cg-show-2donly, CG_SHOW_2DONLY)
_P()
... this flag is something of an anomaly, since it instructs the menu system to do something, rather than requesting a value.
It causes the ownerdraw item to be drawn in 2D form, instead of 3D, as if simpleItems were turned on.
Multiple ownerdrawFlags may be listed, with the effects being combined inclusively (boolean "OR" operation).
NL()XXX need example.





_SECT(values-ui-ownerdraw,Values for ui ``ownerdraw'')
_P()
These are the values for the
XREF(menu-ownerdraw,menu `ownerdraw')
or
XREF(item-ownerdraw,item `ownerdraw')
field.
This set of values are used in the ui menu, aka "main menu" or "ESC menu".

_SECT1(ui-ownerdraw-base,0 UI_OWNERDRAW_BASE)
_P()
??

_SECT1(ui-handicap,1 UI_HANDICAP)
_P()
Player's handicap, as text.
_ELIDE([*unsure as what (just number, slider bar, etc.?).*])

_SECT1(ui-effects,2 UI_EFFECTS)
_P()
Player's effect (rail trail color), as slider.

_SECT1(ui-playermodel,3 UI_PLAYERMODEL)
_P()
Player's chosen Q3A character model (full model, as in the setup menu), as 3D model.

_SECT1(ui-clanname,4 UI_CLANNAME)
_P()
Player's clan name, as text.

_SECT1(ui-clanlogo,5 UI_CLANLOGO)
_P()
Player's clanlogo, as image/shader.

_SECT1(ui-gametype,6 UI_GAMETYPE)
_P()
The gametype, as text.

_SECT1(ui-mappreview,7 UI_MAPPREVIEW)
_P()
The map preview (that little screenshot), as image.

_SECT1(ui-skill,8 UI_SKILL)
_P()
The bot skill level, as text.
(Single-player mode only?)

_SECT1(ui-blueteamname,9 UI_BLUETEAMNAME)
_P()
The blue team name, as text.

_SECT1(ui-redteamname,10 UI_REDTEAMNAME)
_P()
The red team name, as text.

_SECT1(ui-blueteam1,11 UI_BLUETEAM1)
_P()
Blue team leader - for use in bots setup for server/network/local multiplayer game, as text.

_SECT1(ui-blueteam2,12 UI_BLUETEAM2)
_P()
Blue team member 2 - for use in bots setups for server/network/local multiplayer game, as text.

_SECT1(ui-blueteam3,13 UI_BLUETEAM3)
_P()
Blue team member 3 - for use in bots setups for server/network/local multiplayer game, as text.

_SECT1(ui-blueteam4,14 UI_BLUETEAM4)
_P()
Blue team member 4 - for use in bots setups for server/network/local multiplayer game, as text.

_SECT1(ui-blueteam5,15 UI_BLUETEAM5)
_P()
Blue team member 5 - for use in bots setups for server/network/local multiplayer game, as text.

_SECT1(ui-redteam1,16 UI_REDTEAM1)
_P()
Red team leader - for use in bots setups for server/network/local multiplayer game, as text.

_SECT1(ui-redteam2,17 UI_REDTEAM2)
_P()
Red team member 2 - for use in bots setups for server/network/local multiplayer game, as text.

_SECT1(ui-redteam3,18 UI_REDTEAM3)
_P()
Red team member 3 - for use in bots setups for server/network/local multiplayer game, as text.

_SECT1(ui-redteam4,19 UI_REDTEAM4)
_P()
Red team member 4 - for use in bots setups for server/network/local multiplayer game, as text.

_SECT1(ui-redteam5,20 UI_REDTEAM5)
_P()
Red team member 5 - for use in bots setups for server/network/local multiplayer game, as text.

_SECT1(ui-netsource,21 UI_NETSOURCE)
_P()
Source of servers list: Local, Internet, MPlayer, Favorites, etc., as text.

_SECT1(ui-netmappreview,22 UI_NETMAPPREVIEW)
_P()
The map preview (the little screenshot) on selected server, as image.

_SECT1(ui-netfilter,23 UI_NETFILTER)
_P()
The name as text of the game-type filter on servers listing, as text.

_SECT1(ui-tier,24 UI_TIER)
_P()
Tier level, as text.
Presumably only in single-player mode.
<!-- The maps on the current tier? -->

_SECT1(ui-opponentmodel,25 UI_OPPONENTMODEL)
_P()
The opponent's model, as 3D model.
_P()
HELPER_SWEETNUTZ() explains: Some people (pro players) like to specify the model they play against, as they feel certain models are easier to see, hit, etc.

_SECT1(ui-tiermap1,26 UI_TIERMAP1)
_P()
FROM_RFACTORY() Not used.
_ELIDE([*
??
*])

_SECT1(ui-tiermap2,27 UI_TIERMAP2)
_P()
FROM_RFACTORY() Not used.
_ELIDE([*
??
*])

_SECT1(ui-tiermap3,28 UI_TIERMAP3)
_P()
FROM_RFACTORY() Not used.
_ELIDE([*
??
*])

_SECT1(ui-playerlogo,29 UI_PLAYERLOGO)
_P()
FROM_RFACTORY() Player's clan graphic, as image.

_SECT1(ui-opponentlogo,30 UI_OPPONENTLOGO)
_P()
FROM_RFACTORY() Opponent's clan graphic, as image.

_SECT1(ui-playerlogo-metal,31 UI_PLAYERLOGO_METAL)
_P()
FROM_RFACTORY() Players's metal-theme clan logo, as image.
_ELIDE([*
There is a metal-themed logo for Stroggs and Pagans.  Related?
*])

_SECT1(ui-opponentlogo-metal,32 UI_OPPONENTLOGO_METAL)
_P()
FROM_RFACTORY() Opponent's metal-theme clan logo, as image.
_ELIDE([*
There is a metal-themed logo for Stroggs and Pagans.  Related?
*])

_SECT1(ui-playerlogo-name,33 UI_PLAYERLOGO_NAME)
_P()
FROM_RFACTORY() Player's clan name graphic, as image.

_SECT1(ui-opponentlogo-name,34 UI_OPPONENTLOGO_NAME)
_P()
FROM_RFACTORY() Opponent's clan name graphic, as image.

_SECT1(ui-tier-mapname,35 UI_TIER_MAPNAME)
_P()
FROM_RFACTORY() The name of the current map in the current tier, as text.

_SECT1(ui-tier-gametype,36 UI_TIER_GAMETYPE)
_P()
FROM_RFACTORY() The game type of the current map in the current tier, as text.

_SECT1(ui-allmaps-selection,37 UI_ALLMAPS_SELECTION)
_P()
FROM_RFACTORY() The name of the current net map, as text.
_ELIDE([*
Select all maps?
List of all maps?
*])

_SECT1(ui-opponent-name,38 UI_OPPONENT_NAME)
_P()
FROM_RFACTORY() The contents of cvar "ui_opponentName", as text.
_ELIDE([*
Opponent's name as text?
*])

_SECT1(ui-vote-kick,39 UI_VOTE_KICK)
_P()
FROM_RFACTORY() Not used.
_DEVNOTE([*
Not implemented?
The kick-vote menu.
*])

_SECT1(ui-botname,40 UI_BOTNAME)
_P()
FROM_RFACTORY() The name of the currently selected bot, as text.
_ELIDE([*The botname?  Which bot?*])

_SECT1(ui-botskill,41 UI_BOTSKILL)
_P()
FROM_RFACTORY() The skill level of the currently selected bot, as text.
_ELIDE([*The bot skill level?*])

_SECT1(ui-redblue,42 UI_REDBLUE)
_P()
FROM_RFACTORY() "Red" or "Blue" depending on which team the player is on, as text.

_SECT1(ui-crosshair,43 UI_CROSSHAIR)
_P()
The crosshair, as image.
Set `forecolor' to something noticeable to keep this from being invisible.
_P()
See also:
XREF(item-forecolor,`itemDef::forecolor'),

_SECT1(ui-selectedplayer,44 UI_SELECTEDPLAYER)
_P()
FROM_RFACTORY()Selected player name, as text.
If you are the team leader draw, the contents of cvar "cg_selectedPlayerName".
Otherwise, the contents of the cvar "name".
_ELIDE([*
The selected player?
*])

_SECT1(ui-mapcinematic,45 UI_MAPCINEMATIC)
_P()
Map preview (single-player), as cinematic.
Map selection is stored in cvar ``ui_currentMap'' and used as an integer index into the list of available single-player maps (XREF(feeder-maps,FEEDER_MAPS)) (starting with 0); other parts of the ui modify the cvar accordingly.
For a given map named ``EM(mapname)'', attempts to use the first matching file name in the sequence of:

OLIST([*
LI([*"levelshots/EM(mapname)_small.roq"*])
LI([*"levelshots/EM(mapname)_small.tga"*])
LI([*"levelshots/EM(mapname)_small.jpg"*])
LI([*"menu/art/unknown.jpg"*])
*])

Mod programmers can change the sequence and extensions used.
_P()
See also:
XREF(feeder-maps,`FEEDER_MAPS'),
XREF(ui-netmapcinematic,`UI_NETMAPCINEMATIC')

_SECT1(ui-netgametype,46 UI_NETGAMETYPE)
_P()
The gametype on a network game, as text.

_SECT1(ui-netmapcinematic,47 UI_NETMAPCINEMATIC)
_P()
Preview of a map in a networked game, as cinematic.
Map selection is stored in ``ui_currentNetMap'' and used as an integer index into the list of all available maps (XREF(feeder-allmaps,FEEDER_ALLMAPS)).
Acts just like XREF(ui-mapcinematic,UI_MAPCINEMATIC), except for the cvar and feeder sources used.
(XXX: only applicable for starting server?)
_P()
See also:
XREF(feeder-allmaps,`FEEDER_ALLMAPS'),
XREF(ui-mapcinematic,`UI_MAPCINEMATIC')

_SECT1(ui-serverrefreshdate,48 UI_SERVERREFRESHDATE)
_P()
Date of last servers listings update, as text.

_SECT1(ui-servermotd,49 UI_SERVERMOTD)
_P()
Server MOTD ("Message Of The Day", which has historically devolved into actually meaning "a message you see when you connect/login"), as text.

_SECT1(ui-glinfo,50 UI_GLINFO)
_P()
FROM_RFACTORY() Information about the active OpenGL rendering system, as multi-line text..
_ELIDE([*
Show OpenGL info.
As text?  List?
*])

_SECT1(ui-keybindstatus,51 UI_KEYBINDSTATUS)
_P()
FROM_RFACTORY() Message dependign on current status of binding a key, as text.
ULIST([*
LI([*If not waiting for a key to bind: "Press ENTER or CLICK to change.  Press BACKSPACE to clear."*])
LI([*If waiting for a key to bind: "Waiting for new key... Press ESCAPE to cancel."*])
*])


_SECT1(ui-clancinematic,52 UI_CLANCINEMATIC)
_P()
FROM_RFACTORY() The RoQ movie where its name matches that of the player's team logo name (the cinematic version of the team logo), as cinematic.

_SECT1(ui-map-timetobeat,53 UI_MAP_TIMETOBEAT)
_P()
FROM_RFACTORY() The time to beat for this map in minutes and seconds, as text.
_ELIDE([*
Maptime to beat. (???)
*])

_SECT1(ui-joingametype,54 UI_JOINGAMETYPE)
_P()
FROM_RFACTORY() The game type of the selected game (network/multiplayer server), as text.

_SECT1(ui-previewcinematic,55 UI_PREVIEWCINEMATIC)
_P()
Play a cinematic.
Cinematic to play is started with the console command "cinematic MOVIE.roq" or the uiScript command "playMovie n", where 'n' is an integer index into the list of all available movie files (XREF(feeder-cinematics,FEEDER_CINEMATICS)).
_P()
See also:
XREF(menu-cinematic,`menuDef::cinematic'),
XREF(feeder-cinematics,`FEEDER_CINEMATICS'),
XREF(ui-mapcinematic,`FEEDER_MAPCINEMATIC'),
XREF(ui-netmapcinematic,`FEEDER_NETMAPCINEMATIC')

_SECT1(ui-startmapcinematic,56 UI_STARTMAPCINEMATIC)
_P()
FROM_RFACTORY() The RoQ movie where its name matches that of the currently selected map (cinematic version of map preview), as cinematic.

_SECT1(ui-maps-selection,57 UI_MAPS_SELECTION)
_P()
FROM_RFACTORY() The name of the current map, as text.
_ELIDE([*List of all maps available?*])






_SECT(values-ui-ownerdrawflag,Values for ui ``ownerdrawflag'')
_P()
These values can be used for the
XREF(item-ownerdrawflag,item `ownerdrawflag')
field,
to control the appearance of an
XREF(item-ownerdraw,`ownerdraw')
content depending on an engine-dependent value.
These values are used for the ui menu, aka "main menu" or "ESC menu".
Condition for a ``true'' result is listed; ``false'' if the condition(s) is/are not met.
The phrase "Draw this when/if..." may be prefixed to the description to help clarify confusion.

_SECT1(ui-show-leader, UI_SHOW_LEADER)
_P()
... player is the team leader.
This flag can be used to show a team-leader-only commands submenu (such as relinquishing leadership).
Team leader is indicated by an "L" icon in the scores listing.

_SECT1(ui-show-notleader, UI_SHOW_NOTLEADER)
_P()
... player is not the leader.
This flag could be used to show a box indicating the team leader.

_SECT1(ui-show-favoriteservers, UI_SHOW_FAVORITESERVERS)
_P()
... on a favorite server.
A favorite server is one in the "favorite servers" list.

_SECT1(ui-show-anynonteamgame, UI_SHOW_ANYNONTEAMGAME)
_P()
... in any non-team-based games (FFA, tournament, etc.).

_SECT1(ui-show-anyteamgame, UI_SHOW_ANYTEAMGAME)
_P()
... in any team-based games (TDM, CTF, 1CTF, etc.).

_SECT1(ui-show-newhighscore, UI_SHOW_NEWHIGHSCORE)
_P()
... player got the newest high score.
Only applicable to single-player game.

_SECT1(ui-show-demoavailable, UI_SHOW_DEMOAVAILABLE)
_P()
FROM_RFACTORY()
... a valid demo file exists (i.e. check if there's any demos available).

_SECT1(ui-show-newbesttime, UI_SHOW_NEWBESTTIME)
_P()
... player got the newest best time.
Only applicable to single-player game.

_SECT1(ui-show-ffa, UI_SHOW_FFA)
_P()
... in a FFA (Free-For-All) game type.

_SECT1(ui-show-notffa, UI_SHOW_NOTFFA)
_P()
... in a non-FFA game type.

_SECT1(ui-show-netanynonteamgame, UI_SHOW_NETANYNONTEAMGAME)
_P()
... in any team-based game on a network.
_P()
Useful for showing a menu item to save current server to favorite's list.
Saving a single-player server (local machine) to the list is pointless.

_SECT1(ui-show-netanyteamgame, UI_SHOW_NETANYTEAMGAME)
_P()
... in any non-team-based game on a network.

_SECT1(ui-show-notfavoriteservers, UI_SHOW_NOTFAVORITESERVERS)
_P()
... player is on a not-favorite server (server is not on favorites list).




_SECT(values-uiscript,Values for ``uiScript'')
_P()
Many thanks to HELPER_DEMENTOR() for starting this section.
_P()
These values are used for
XREF(script-uiScript,uiScript).
These are game-specific internal actions that cannot be effected by .menu text alone.
These are actions carried out in the mod's C code, but triggered from the menus.
In a way, they are like hooks for actions into the mod from the menus.
Mod makers can create their own uiScript components; the pattern is in ui/ui_main.c, UI_RunMenuScript().
_P()
The listed values here appear in the source for Q3[T]A 1.27.
Values are case-insensitive, but I still preserve the capitalization as it appears in the source text.

_SECT1(uiScript-stopRefresh,stopRefresh)
_P()
Stops the updating of servers list (when you try to join an online game).
In other words, queries to the master server and servers are terminated.
_P()
See also:
XREF(uiScript-RefreshServers,RefreshServers),
XREF(item-feeder,itemDef::feeder),
XREF(feeder-servers,FEEDER_SERVERS)

_SECT1(uiScript-LoadDemos,LoadDemos)
_P()
Loads a list of demos to be used with the demo feeder.
This also updates the feeder source for FEEDER_DEMO.
_P()
See also:
XREF(item-feeder,itemDef::feeder),
XREF(feeder-demos,FEEDER_DEMO),
XREF(uiScript-RunSPDemo,uiScript::RunSPDemo)

_SECT1(uiScript-LoadMods,LoadMods)
_P()
Loads a list of demos to be used with the mods feeder.
This also updates the feeder source for FEEDER_MODS.
If a file named `description.txt' exists in a mod directory, the first line of that file is used as the mod's name in the feeder list.
If no such file exists, the name of the directory itself is used.
_P()
See also:
XREF(item-feeder,itemDef::feeder),
XREF(feeder-mods,FEEDER_MODS),
XREF(uiScript-RunMod,uiScript::RunMod)

_SECT1(uiScript-playMovie,playMovie)
_P()
Starts playing the RoQ selected in the movies list.
The movies list is any widget using a movie feeder.
_P()
See also:
XREF(item-feeder,itemDef::feeder),
XREF(feeder-cinematics,FEEDER_CINEMATICS),
XREF(uiScript-LoadMovies,uiScript::LoadMovies)

_SECT1(uiScript-verifyCDKey,verifyCDKey)
_P()
Combines the cvars "cdkey1" through "cdkey4" into a single cvar "cdkey", which is then passed through the Quake3 internal cdkey verification function.
After verification is complete, the cvar "ui_cdkeyvalid" contains a message indicating the result.
_P()
See also:
XREF(uiScript-getCDKey,getCDKey)

_SECT1(uiScript-StartServer,StartServer)
_P()
Starts a server, and the associated online game (instead of just joining).
Initialized values include dedicated setting, gametype, number of available spots (maxClients), number of bots, bot names (if any).
_P()
See also:
XREF(uiScript-SkirmishStart,uiScript::SkirmishStart)

_SECT1(uiScript-updateSPMenu,updateSPMenu)
_P()
Update the Single Player menu based on latest achievements,
such as after completing a [new] arena.
_P()
See also:
XREF(uiScript-resetScores,uiScript::resetScores),
XREF(uiScript-SkirmishStart,uiScript::SkirmishStart)

_SECT1(uiScript-resetDefaults,resetDefaults)
_P()
Resets many settings to default: video, sound, game, input, keys.
Many of the default settings are set by running the script named 'default.cfg'.
This should be packaged in pak0.pk3.
_P()
See also:
XREF(uiScript-glCustom,uiScript::glCustom)

_SECT1(uiScript-getCDKey,getCDKey)
_P()
Retrieves the stored CD key from internal Quake 3 memory, and stores into 4-character pieces into cvars "cdkey1" through "cdkey4".
_P()
See also:
XREF(uiScript-verifyCDKey,verifyCDKey)

_SECT1(uiScript-loadArenas,loadArenas)
_P()
Loads list of maps for starting server.
_P()
See also:
XREF(uiScript-StartServer,uiScript::StartServer),
XREF(uiScript-SkirmishStart,uiScript::SkirmishStart),
XREF(item-feeder,itemDef::feeder),
XREF(feeder-allmaps,FEEDER_ALLMAPS)

_SECT1(uiScript-loadGameInfo,loadGameInfo)
_P()
Parses "gameinfo.txt" file.
_ELIDE([*(XXX: wtf is 'gameinfo.txt'?)*])
Also loads (single-player) best scores for each map.
_P()
See also:
XREF(uiScript-resetScores,uiScript::resetScores)

_SECT1(uiScript-resetScores,resetScores)
_P()
Resets best scores for each map.
_ELIDE([*(XXX: related to gameinfo.txt?)*])
_P()
See also:
XREF(uiScript-resetScores,uiScript::loadGameInfo)

_SECT1(uiScript-RefreshServers,RefreshServers)
_P()
Refresh the list of servers (when you want to play online).
This clears the list, queries the master servers for list of servers, then pings each of the servers.
_P()
See also:
XREF(uiScript-RefreshFilter,uiScript::RefreshFilter),
XREF(uiScript-ServerStatus,uiScript::ServerStatus),
XREF(item-feeder,itemDef::feeder),
XREF(feeder-servers,FEEDER_SERVERS)

_SECT1(uiScript-RefreshFilter,RefreshFilter)
_P()
Refresh list of servers according to filter.
This doesn't clear the list of servers, but still (re-)pings the servers in the list.
_P()
See also:
XREF(uiScript-RefreshFilter,uiScript::RefreshServers),
XREF(item-feeder,itemDef::feeder),
XREF(feeder-servers,FEEDER_SERVERS)

_SECT1(uiScript-RunSPDemo,RunSPDemo)
_P()
Plays back a demo.
The demo to play is the one selected in the list that uses a demo feeder.
_P()
See also:
XREF(uiScript-LoadDemos,uiScript::LoadDemos),
XREF(item-feeder,itemDef::feeder),
XREF(feeder-demos,FEEDER_DEMOS)

_SECT1(uiScript-LoadMovies,LoadMovies)
_P()
Load a list of movies.
_P()
See also:
XREF(uiScript-playMovie,uiScript::playMovie),
XREF(item-feeder,itemDef::feeder),
XREF(feeder-cinematics,FEEDER_CINEMATICS)

_SECT1(uiScript-RunMod,RunMod)
_P()
Run mod selected in listbox.
The mod to load is the one selected in the list using the mods feeder.
_P()
See also:
XREF(uiScript-LoadMods,uiScript::LoadMods),
XREF(item-feeder,itemDef::feeder),
XREF(feeder-mods,FEEDER_MODS)

_SECT1(uiScript-Quake3,Quake3)
_P()
Switch to baseq3 (the version without all the nifty new menu code).
_P()
See also:
XREF(uiScript-Quit,uiScript::Quit)

_SECT1(uiScript-closeJoin,closeJoin)
_P()
If server list refresh is in progress, the refreshing is stopped.
_ELIDE([*
Otherwise, causes the main menu to open up (thereby causing the "Join" menu to close).*])
_P()
See also:
XREF(uiScript-RefreshServers,uiScript::RefreshServers)

_SECT1(uiScript-ServerStatus,ServerStatus)
_P()
Retrieve status of selected server (server cvars, player list, etc.).
The selected server is the one selected in the list using the servers feeder.
Updates the serverstatus feeder.
_P()
See also:
XREF(uiScript-RefreshServers,uiScript::RefreshServers),
XREF(uiScript-FoundPlayerServerStatus,uiScript::FoundPlayerServerStatus),
XREF(item-feeder,itemDef::feeder),
XREF(feeder-servers,FEEDER_SERVERS),
XREF(feeder-serverstatus,FEEDER_SERVERSTATUS)

_SECT1(uiScript-FoundPlayerServerStatus,FoundPlayerServerStatus)
_P()
Retrieves status of server.
The selected server is the one selected in the list using the findplayer feeder.
Updates the serverstatus feeder.
_P()
See also:
XREF(uiScript-ServerStatus,uiScript::ServerStatus),
XREF(item-feeder,itemDef::feeder),
XREF(feeder-servers,FEEDER_FINDPLAYER),
XREF(feeder-serverstatus,FEEDER_SERVERSTATUS)

_SECT1(uiScript-FindPlayer,FindPlayer)
_P()
Search for a player's name in the list of servers.
Player name to find is stored in the car ``ui_findPlayer''.
Color codes are stripped during search (i.e. color codes don't matter).
The specified name is searched as a substring (i.e. it can be a short piece found inside a longer name, and exact matches also show up).
Updates the findplayer feeder with the list of server names.
_P()
See also:
XREF(feeder-findplayer,FEEDER_FINDPLAYER)

_SECT1(uiScript-JoinServer,JoinServer)
_P()
Join the game on the selected server.
The server to join is the one selected in the list using the servers feeder.
_P()
See also:
XREF(feeder-servers,FEEDER_SERVERS),
XREF(uiScript-RefreshServers,uiScript::RefreshServers)

_SECT1(uiScript-FoundPlayerJoinServer,FoundPlayerJoinServer)
_P()
Joins the server with the player for whom you were searching, if found.
The server to join is the one selected in the list using the findplayer feeder.
_P()
See also:
XREF(feeder-findplayer,FEEDER_FINDPLAYER),
XREF(uiScript-FindPlayer,uiScript::FindPlayer)

_SECT1(uiScript-Quit,Quit)
_P()
Quits Quake 3 as a program entirely.
The cvar "ui_singlePlayerActive" is set to 0 on quitting.
(XXX: cvar ui_singlePlayerActive is used to determine if, on error condition, an error message popup window should be used (1) or not (0).  Find a better place to put this info.)
_P()
See also:
XREF(uiScript-Leave,uiScript::Leave),
XREF(uiScript-Quake3,uiScript::Quake3)

_SECT1(uiScript-Control,Controls)
_P()
Pauses the game (in a manner), ui module takes control of the keyboard, then menu "setup_menu2" is opened.
Basically, prepares Quake 3 for the player to set key bindings.
_P()
See also:
XREF(item-type-bind,ITEM_TYPE_BIND)

_SECT1(uiScript-Leave,Leave)
_P()
Quits from a game, but not Quake 3 entirely.
Main menu is opened afterwards.
_P()
See also:
XREF(uiScript-Quit,uiScript::Quit),
XREF(uiScript-Quake3,uiScript::Quake3)

_SECT1(uiScript-ServerSort,ServerSort &int;)
_P()
Sort the list of servers (when you want to join online game).
The parameter indicates which column to sort.
If a new column is selected, the list is sorted in ascending order.
If specified again for the second time in a row, the sort direction is reversed.
Each time the column is re-selected without a new column selected (i.e. clicking on the same column again and again), the sort direction is sorted in the other order (i.e. sort order keeps switching).
_P()
See also:
XREF(uiScript-RefreshServers,uiScript::RefreshServers),
XREF(uiScript-RefreshFilter,uiScript::RefreshFilter)

_SECT1(uiScript-nextSkirmish,nextSkirmish)
_P()
Single-player game, go on to next round (as from the podiums display at the end of a round).

_SECT1(uiScript-SkirmishStart,SkirmishStart)
_P()
Start single-player game.
_P()
See also:
XREF(uiScript-nextSkirmish,uiScript::nextSkirmish)

_SECT1(uiScript-glCustom,glCustom)
_P()
Set "Video Setting" label to "Custom" (out of "Low", "Medium", "High", "Custom").
_P()
See also:
XREF(uiScript-resetDefaults,uiScript::resetDefaults)

_SECT1(uiScript-saveControls,saveControls)
_P()
Commits the displayed bindings setup to actual binds for Quake 3.
_P()
See also:
XREF(uiScript-loadControls,uiScript::loadControls)

_SECT1(uiScript-loadControls,loadControls)
_P()
Retrieves key binds from Quake 3 to set up the displayed bindings.
_P()
See also:
XREF(uiScript-saveControls,uiScript::saveControls)

_SECT1(uiScript-clearError,clearError)
_P()
Sets the cvar ``com_errorMessage'' to an empty string.
This, in effect, clears the stored error message.
The cvar ``com_errorMessage'' is set upon any error condition by the Quake 3 engine.
This is sort of like a bridge for error messages between the Quake 3 engine and the mod space.

_SECT1(uiScript-UpdateFilter,UpdateFilter)
_P()
Refresh the list of servers with the new selected filter.
XXX: does this re-ping the servers?

_SECT1(uiScript-closeingame,closeingame)
_P()
Closes the in-game menu.
The in-game menu is the menu usually bound to ESC.

_SECT1(uiScript-voteMap,voteMap)
_P()
Call a vote to switch to the selected map.
The selected map is the one selected in the listbox using the allmaps feeder.
_P()
See also:
XREF(item-feeder,itemDef::feeder),
XREF(feeder-allmaps,FEEDER_ALLMAPS)

_SECT1(uiScript-voteKick,voteKick)
_P()
Call a vote to kick the selected player.
The selected player is the one selected in the listbox using the player_list feeder.
_P()
See also:
XREF(item-feeder,itemDef::feeder),
XREF(feeder-player-list,FEEDER_PLAYER_LIST)

_SECT1(uiScript-voteGame,voteGame)
_P()
Vote on gametype (FFA, TDM, CTF, etc.).
(XXX: parameters?)

_SECT1(uiScript-voteLeader,voteLeader)
_P()
Call a vote to make the selected player the team leader.
Selected player is the one selected in the listbox using the team_list feeder.
_P()
See also:
XREF(item-feeder,itemDef::feeder),
XREF(feeder-player-list,FEEDER_TEAM_LIST)

_SECT1(uiScript-addBot,addBot)
_P()
Adds a bot to the (online) game.
The selected bot is the one selected in the listbox using the heads feeder.
_P()
See also:
XREF(item-feeder,itemDef::feeder),
XREF(feeder-heads,FEEDER_HEADS)

_SECT1(uiScript-addFavorite,addFavorite)
_P()
Add the currently joined server to the Favorite Servers list.
(XXX: details... limits, time of saves, etc.)

_SECT1(uiScript-deleteFavorite,deleteFavorite)
_P()
Delete current server from Favorite Servers list.
(XXX: same queestions as addFavorite)

_SECT1(uiScript-createFavorite,createFavorite)
_P()
Add to Favorite Servers list the server specified by the cvars
``ui_favoriteName'' and ``ui_favoriteAddress''.
XXX: cvars set by user in a menu beforehand?

_SECT1(uiScript-orders,orders &string;)
_P()
Canned action after selecting an order (bot directive) from in-game menu.
These orders help direct the actions of the game bots.
The string is executed as a console command and menus are closed (to resume gameplay).
If a teammate is selected with the cvar ``cg_selectedPlayer'', the order is sent to the teammate.
Otherwise, the order is sent to the entire team.

_SECT1(uiScript-voiceOrdersTeam,voiceOrdersTeam &string;)
_P()
Canned action after selecting a team order from in-game menus.
The strig is exected as a console command, and the menus closed (resuming gameplay).
The order is implied to be applied to the team as a whole, so if a teammate is selected (cg_selectedPlayer), nothing is run.
_P()
See also:
XREF(uiScript-orders,uiScript::orders)

_SECT1(uiScript-voiceOrders,voiceOrders &string;)
_P()
Canned action after selecting a bot order from in-game menus.
The string is executed as a command, and menus closed (resuming gameplay).
The order is implied to be applied only to a single player, so if a teammate is NOT selected, nothing is run.
_P()
See also:
XREF(uiScript-voiceOrdersTeam,uiScript::voiceOrdersTeam),
XREF(uiScript-orders,uiScript::orders)

_SECT1(uiScript-update,update)
_P()
Synchronize cvars.
Cvars set in the menus are used to modify a set of other associated cvars.
For example, reading cvar ``ui_glCustom'' (modified by the menus) to set the values of r_vertexLight, r_mode, cg_shadows, etc (modified with uiScript update).



_SECT(hud,Heads-Up Display)
_P()
The HUD is so named because it overlays information over the visual field.
This is in contrast to "looking down" at a dashboard of instruments;
a HUD provides critical information while the head is still "up".

_SECT1(hud-components,HUD components)
_P()
The Q3TA HUD is a special case of the menus.
It is the menu interpreter embedded in cgame (client game).
Each HUD ``block'' is a menuDef, containing itemDefs that define the HUD contents.
The complete HUD description is actually composed of three parts:
OLIST(
LI([*The regular in-game HUD*])
LI([*A non-team-game scoreboard*])
LI([*A team-game scoreboard*])
)
_P()
Each may be individually customized.
In fact, all three can be combined into one single file, however unwieldy that may be.
The non-team-game scoreboard is one large menuDef that EM(must) be named (the `name' field) ``score_menu''.
The team-game scoreboard is one large menuDef that EM(must) be named ``teamscore_menu''.
When the player wants to see the scoreboard, Q3TA hides the entire HUD,
and then display only one of the scoreboards EM(by name) depending on gametype.
_P()
The regular in-game HUD to use is determined by the contents of the cvar ``cg_hudFiles''.
This value names a file that lists the in-game HUD menu files to use.
This file may not exceed 4096 bytes in size.
Default value for ``cg_hudFiles'' in Q3TA is &quot;ui/hud.txt&quot;, the content of which is:
LITERALON()
{
  loadmenu { "ui/hud.menu" }
  loadmenu { "ui/score.menu" }
  loadmenu { "ui/teamscore.menu" }
}
LITERALOFF()
_P()
The keyword ``loadmenu'' indicate the menu file to load and parse.
Multiple uses indicate multiple files to combine together.
Each of the .menu has a filesize limit of 65536 bytes (XXX: verify).
_P()
The default descriptions for the menus `score_menu' and `teamscore_menu' are defined in ui/score.menu and ui/teamscore.menu, respectively.
_P()
The command ``loadhud'' enacts the actual change of HUD.
_P()
In the event of errors, the game may crash or quit.
In the extreme case, you may have to set ``cg_hudFiles'' back to &quot;ui/hud.txt&quot; by some other means --
in the startup menus with &quot;/set cg_hudFiles ui/hud.txt&quot;, or by manually editing q3config.cfg.

_SECT1(hud-load,Loading Custom HUD)
_P()
In cookbook form:
ULIST(
LI(The file ``myhud.cfg'':
LITERALON()
{
  loadmenu { "myhud.menu" }
  loadmenu { "ui/score.menu" }
  loadmenu { "ui/teamscore.menu" }
}
LITERALOFF()
)
LI([*The file ``myhud.menu'' describing the actual HUD (like ui/hud.menu)*])
LI([*
Commands to run in Q3 console:
LITERALON()
/set cg_hudFiles myhud.cfg
/loadhud
LITERALOFF()
*])
LI([*
Restoring the default HUD:
LITERALON()
/set cg_hudFiles ui/hud.txt
/loadhud
LITERALOFF()
*])
)



_SECT(fdl,GNU Free Documentation License)

_P()
This document is distributed under the terms of the GNU Free Documentation License, a copy of which follows.
Other copies and forms of the following is available on the World Wide Web at
_URL(http://www.gnu.org/copyleft/fdl.html)
_ELIDE([*
or by FTP at
_URL(ftp://ftp.gnu.org/pub/gnu/COPYING.DOC)
*])
_P()

LITERALON()
		GNU Free Documentation License
		   Version 1.1, March 2000

 Copyright (C) 2000  Free Software Foundation, Inc.
     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.


0. PREAMBLE

The purpose of this License is to make a manual, textbook, or other
written document "free" in the sense of freedom: to assure everyone
the effective freedom to copy and redistribute it, with or without
modifying it, either commercially or noncommercially.  Secondarily,
this License preserves for the author and publisher a way to get
credit for their work, while not being considered responsible for
modifications made by others.

This License is a kind of "copyleft", which means that derivative
works of the document must themselves be free in the same sense.  It
complements the GNU General Public License, which is a copyleft
license designed for free software.

We have designed this License in order to use it for manuals for free
software, because free software needs free documentation: a free
program should come with manuals providing the same freedoms that the
software does.  But this License is not limited to software manuals;
it can be used for any textual work, regardless of subject matter or
whether it is published as a printed book.  We recommend this License
principally for works whose purpose is instruction or reference.


1. APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work that contains a
notice placed by the copyright holder saying it can be distributed
under the terms of this License.  The "Document", below, refers to any
such manual or work.  Any member of the public is a licensee, and is
addressed as "you".

A "Modified Version" of the Document means any work containing the
Document or a portion of it, either copied verbatim, or with
modifications and/or translated into another language.

A "Secondary Section" is a named appendix or a front-matter section of
the Document that deals exclusively with the relationship of the
publishers or authors of the Document to the Document's overall subject
(or to related matters) and contains nothing that could fall directly
within that overall subject.  (For example, if the Document is in part a
textbook of mathematics, a Secondary Section may not explain any
mathematics.)  The relationship could be a matter of historical
connection with the subject or with related matters, or of legal,
commercial, philosophical, ethical or political position regarding
them.

The "Invariant Sections" are certain Secondary Sections whose titles
are designated, as being those of Invariant Sections, in the notice
that says that the Document is released under this License.

The "Cover Texts" are certain short passages of text that are listed,
as Front-Cover Texts or Back-Cover Texts, in the notice that says that
the Document is released under this License.

A "Transparent" copy of the Document means a machine-readable copy,
represented in a format whose specification is available to the
general public, whose contents can be viewed and edited directly and
straightforwardly with generic text editors or (for images composed of
pixels) generic paint programs or (for drawings) some widely available
drawing editor, and that is suitable for input to text formatters or
for automatic translation to a variety of formats suitable for input
to text formatters.  A copy made in an otherwise Transparent file
format whose markup has been designed to thwart or discourage
subsequent modification by readers is not Transparent.  A copy that is
not "Transparent" is called "Opaque".

Examples of suitable formats for Transparent copies include plain
ASCII without markup, Texinfo input format, LaTeX input format, SGML
or XML using a publicly available DTD, and standard-conforming simple
HTML designed for human modification.  Opaque formats include
PostScript, PDF, proprietary formats that can be read and edited only
by proprietary word processors, SGML or XML for which the DTD and/or
processing tools are not generally available, and the
machine-generated HTML produced by some word processors for output
purposes only.

The "Title Page" means, for a printed book, the title page itself,
plus such following pages as are needed to hold, legibly, the material
this License requires to appear in the title page.  For works in
formats which do not have any title page as such, "Title Page" means
the text near the most prominent appearance of the work's title,
preceding the beginning of the body of the text.


2. VERBATIM COPYING

You may copy and distribute the Document in any medium, either
commercially or noncommercially, provided that this License, the
copyright notices, and the license notice saying this License applies
to the Document are reproduced in all copies, and that you add no other
conditions whatsoever to those of this License.  You may not use
technical measures to obstruct or control the reading or further
copying of the copies you make or distribute.  However, you may accept
compensation in exchange for copies.  If you distribute a large enough
number of copies you must also follow the conditions in section 3.

You may also lend copies, under the same conditions stated above, and
you may publicly display copies.


3. COPYING IN QUANTITY

If you publish printed copies of the Document numbering more than 100,
and the Document's license notice requires Cover Texts, you must enclose
the copies in covers that carry, clearly and legibly, all these Cover
Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
the back cover.  Both covers must also clearly and legibly identify
you as the publisher of these copies.  The front cover must present
the full title with all words of the title equally prominent and
visible.  You may add other material on the covers in addition.
Copying with changes limited to the covers, as long as they preserve
the title of the Document and satisfy these conditions, can be treated
as verbatim copying in other respects.

If the required texts for either cover are too voluminous to fit
legibly, you should put the first ones listed (as many as fit
reasonably) on the actual cover, and continue the rest onto adjacent
pages.

If you publish or distribute Opaque copies of the Document numbering
more than 100, you must either include a machine-readable Transparent
copy along with each Opaque copy, or state in or with each Opaque copy
a publicly-accessible computer-network location containing a complete
Transparent copy of the Document, free of added material, which the
general network-using public has access to download anonymously at no
charge using public-standard network protocols.  If you use the latter
option, you must take reasonably prudent steps, when you begin
distribution of Opaque copies in quantity, to ensure that this
Transparent copy will remain thus accessible at the stated location
until at least one year after the last time you distribute an Opaque
copy (directly or through your agents or retailers) of that edition to
the public.

It is requested, but not required, that you contact the authors of the
Document well before redistributing any large number of copies, to give
them a chance to provide you with an updated version of the Document.


4. MODIFICATIONS

You may copy and distribute a Modified Version of the Document under
the conditions of sections 2 and 3 above, provided that you release
the Modified Version under precisely this License, with the Modified
Version filling the role of the Document, thus licensing distribution
and modification of the Modified Version to whoever possesses a copy
of it.  In addition, you must do these things in the Modified Version:

A. Use in the Title Page (and on the covers, if any) a title distinct
   from that of the Document, and from those of previous versions
   (which should, if there were any, be listed in the History section
   of the Document).  You may use the same title as a previous version
   if the original publisher of that version gives permission.
B. List on the Title Page, as authors, one or more persons or entities
   responsible for authorship of the modifications in the Modified
   Version, together with at least five of the principal authors of the
   Document (all of its principal authors, if it has less than five).
C. State on the Title page the name of the publisher of the
   Modified Version, as the publisher.
D. Preserve all the copyright notices of the Document.
E. Add an appropriate copyright notice for your modifications
   adjacent to the other copyright notices.
F. Include, immediately after the copyright notices, a license notice
   giving the public permission to use the Modified Version under the
   terms of this License, in the form shown in the Addendum below.
G. Preserve in that license notice the full lists of Invariant Sections
   and required Cover Texts given in the Document's license notice.
H. Include an unaltered copy of this License.
I. Preserve the section entitled "History", and its title, and add to
   it an item stating at least the title, year, new authors, and
   publisher of the Modified Version as given on the Title Page.  If
   there is no section entitled "History" in the Document, create one
   stating the title, year, authors, and publisher of the Document as
   given on its Title Page, then add an item describing the Modified
   Version as stated in the previous sentence.
J. Preserve the network location, if any, given in the Document for
   public access to a Transparent copy of the Document, and likewise
   the network locations given in the Document for previous versions
   it was based on.  These may be placed in the "History" section.
   You may omit a network location for a work that was published at
   least four years before the Document itself, or if the original
   publisher of the version it refers to gives permission.
K. In any section entitled "Acknowledgements" or "Dedications",
   preserve the section's title, and preserve in the section all the
   substance and tone of each of the contributor acknowledgements
   and/or dedications given therein.
L. Preserve all the Invariant Sections of the Document,
   unaltered in their text and in their titles.  Section numbers
   or the equivalent are not considered part of the section titles.
M. Delete any section entitled "Endorsements".  Such a section
   may not be included in the Modified Version.
N. Do not retitle any existing section as "Endorsements"
   or to conflict in title with any Invariant Section.

If the Modified Version includes new front-matter sections or
appendices that qualify as Secondary Sections and contain no material
copied from the Document, you may at your option designate some or all
of these sections as invariant.  To do this, add their titles to the
list of Invariant Sections in the Modified Version's license notice.
These titles must be distinct from any other section titles.

You may add a section entitled "Endorsements", provided it contains
nothing but endorsements of your Modified Version by various
parties--for example, statements of peer review or that the text has
been approved by an organization as the authoritative definition of a
standard.

You may add a passage of up to five words as a Front-Cover Text, and a
passage of up to 25 words as a Back-Cover Text, to the end of the list
of Cover Texts in the Modified Version.  Only one passage of
Front-Cover Text and one of Back-Cover Text may be added by (or
through arrangements made by) any one entity.  If the Document already
includes a cover text for the same cover, previously added by you or
by arrangement made by the same entity you are acting on behalf of,
you may not add another; but you may replace the old one, on explicit
permission from the previous publisher that added the old one.

The author(s) and publisher(s) of the Document do not by this License
give permission to use their names for publicity for or to assert or
imply endorsement of any Modified Version.


5. COMBINING DOCUMENTS

You may combine the Document with other documents released under this
License, under the terms defined in section 4 above for modified
versions, provided that you include in the combination all of the
Invariant Sections of all of the original documents, unmodified, and
list them all as Invariant Sections of your combined work in its
license notice.

The combined work need only contain one copy of this License, and
multiple identical Invariant Sections may be replaced with a single
copy.  If there are multiple Invariant Sections with the same name but
different contents, make the title of each such section unique by
adding at the end of it, in parentheses, the name of the original
author or publisher of that section if known, or else a unique number.
Make the same adjustment to the section titles in the list of
Invariant Sections in the license notice of the combined work.

In the combination, you must combine any sections entitled "History"
in the various original documents, forming one section entitled
"History"; likewise combine any sections entitled "Acknowledgements",
and any sections entitled "Dedications".  You must delete all sections
entitled "Endorsements."


6. COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents
released under this License, and replace the individual copies of this
License in the various documents with a single copy that is included in
the collection, provided that you follow the rules of this License for
verbatim copying of each of the documents in all other respects.

You may extract a single document from such a collection, and distribute
it individually under this License, provided you insert a copy of this
License into the extracted document, and follow this License in all
other respects regarding verbatim copying of that document.


7. AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate
and independent documents or works, in or on a volume of a storage or
distribution medium, does not as a whole count as a Modified Version
of the Document, provided no compilation copyright is claimed for the
compilation.  Such a compilation is called an "aggregate", and this
License does not apply to the other self-contained works thus compiled
with the Document, on account of their being thus compiled, if they
are not themselves derivative works of the Document.

If the Cover Text requirement of section 3 is applicable to these
copies of the Document, then if the Document is less than one quarter
of the entire aggregate, the Document's Cover Texts may be placed on
covers that surround only the Document within the aggregate.
Otherwise they must appear on covers around the whole aggregate.


8. TRANSLATION

Translation is considered a kind of modification, so you may
distribute translations of the Document under the terms of section 4.
Replacing Invariant Sections with translations requires special
permission from their copyright holders, but you may include
translations of some or all Invariant Sections in addition to the
original versions of these Invariant Sections.  You may include a
translation of this License provided that you also include the
original English version of this License.  In case of a disagreement
between the translation and the original English version of this
License, the original English version will prevail.


9. TERMINATION

You may not copy, modify, sublicense, or distribute the Document except
as expressly provided for under this License.  Any other attempt to
copy, modify, sublicense or distribute the Document is void, and will
automatically terminate your rights under this License.  However,
parties who have received copies, or rights, from you under this
License will not have their licenses terminated so long as such
parties remain in full compliance.


10. FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new, revised versions
of the GNU Free Documentation License from time to time.  Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.  See
http://www.gnu.org/copyleft/.

Each version of the License is given a distinguishing version number.
If the Document specifies that a particular numbered version of this
License "or any later version" applies to it, you have the option of
following the terms and conditions either of that specified version or
of any later version that has been published (not as a draft) by the
Free Software Foundation.  If the Document does not specify a version
number of this License, you may choose any version ever published (not
as a draft) by the Free Software Foundation.


ADDENDUM: How to use this License for your documents

To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and
license notices just after the title page:

      Copyright (c)  YEAR  YOUR NAME.
      Permission is granted to copy, distribute and/or modify this document
      under the terms of the GNU Free Documentation License, Version 1.1
      or any later version published by the Free Software Foundation;
      with the Invariant Sections being LIST THEIR TITLES, with the
      Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
      A copy of the license is included in the section entitled "GNU
      Free Documentation License".

If you have no Invariant Sections, write "with no Invariant Sections"
instead of saying which ones are invariant.  If you have no
Front-Cover Texts, write "no Front-Cover Texts" instead of
"Front-Cover Texts being LIST"; likewise for Back-Cover Texts.

If your document contains nontrivial examples of program code, we
recommend releasing these examples in parallel under your choice of
free software license, such as the GNU General Public License,
to permit their use in free software.

LITERALOFF()

</article>

