summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Angus <tim@ngus.net>2005-12-08 18:23:29 +0000
committerTim Angus <tim@ngus.net>2005-12-08 18:23:29 +0000
commit097793461a0f1f6e124f335e79d99a0f4573a769 (patch)
tree6344ec87d62629b0506c4b0ae14fbf8098e0a10d
parentaf79e2e7a425a3965b55d80fd5dd5e4dc92dcc45 (diff)
Added tremulous-manual and tremulous_ui from sf CVS repository.
-rw-r--r--tremulous-manual/manual.lyx7086
-rw-r--r--tremulous_ui/connect.menu13
-rw-r--r--tremulous_ui/createfavorite.menu129
-rw-r--r--tremulous_ui/createserver.menu547
-rw-r--r--tremulous_ui/error.menu103
-rw-r--r--tremulous_ui/findplayer.menu245
-rw-r--r--tremulous_ui/hud.txt11
-rw-r--r--tremulous_ui/infopanes.def350
-rw-r--r--tremulous_ui/infopanes.def.h418
-rw-r--r--tremulous_ui/ingame.menu135
-rw-r--r--tremulous_ui/ingame.txt11
-rw-r--r--tremulous_ui/ingame_about.menu173
-rw-r--r--tremulous_ui/ingame_callteamvote.menu175
-rw-r--r--tremulous_ui/ingame_callvote.menu276
-rw-r--r--tremulous_ui/ingame_leave.menu331
-rw-r--r--tremulous_ui/ingame_options.menu1991
-rw-r--r--tremulous_ui/ingame_vote.menu515
-rw-r--r--tremulous_ui/joinserver.menu772
-rw-r--r--tremulous_ui/loading.menu193
-rw-r--r--tremulous_ui/main.menu141
-rw-r--r--tremulous_ui/menus.txt19
-rw-r--r--tremulous_ui/mod.menu106
-rw-r--r--tremulous_ui/password.menu92
-rw-r--r--tremulous_ui/ptrc.menu111
-rw-r--r--tremulous_ui/punkbuster.menu292
-rw-r--r--tremulous_ui/quit.menu102
-rw-r--r--tremulous_ui/quitcredit.menu431
-rw-r--r--tremulous_ui/serverinfo.menu143
-rw-r--r--tremulous_ui/teamscore.menu286
-rw-r--r--tremulous_ui/tremulous.txt19
-rw-r--r--tremulous_ui/tremulous_alien_builder_hud.menu307
-rw-r--r--tremulous_ui/tremulous_alien_general_hud.menu296
-rw-r--r--tremulous_ui/tremulous_alienbuild.menu117
-rw-r--r--tremulous_ui/tremulous_alienclass.menu139
-rw-r--r--tremulous_ui/tremulous_aliendialogs.menu85
-rw-r--r--tremulous_ui/tremulous_alienupgrade.menu117
-rw-r--r--tremulous_ui/tremulous_default_hud.menu103
-rw-r--r--tremulous_ui/tremulous_human_hud.menu398
-rw-r--r--tremulous_ui/tremulous_humanarmoury.menu165
-rw-r--r--tremulous_ui/tremulous_humanbuild.menu116
-rw-r--r--tremulous_ui/tremulous_humandialogs.menu85
-rw-r--r--tremulous_ui/tremulous_humanitem.menu139
-rw-r--r--tremulous_ui/tremulous_teamselect.menu117
43 files changed, 17400 insertions, 0 deletions
diff --git a/tremulous-manual/manual.lyx b/tremulous-manual/manual.lyx
new file mode 100644
index 00000000..30cf4830
--- /dev/null
+++ b/tremulous-manual/manual.lyx
@@ -0,0 +1,7086 @@
+#LyX 1.3 created this file. For more info see http://www.lyx.org/
+\lyxformat 221
+\textclass article
+\language english
+\inputencoding auto
+\fontscheme pslatex
+\graphics default
+\paperfontsize default
+\spacing single
+\papersize a4paper
+\paperpackage a4
+\use_geometry 1
+\use_amsmath 0
+\use_natbib 0
+\use_numerical_citations 0
+\paperorientation portrait
+\leftmargin 2cm
+\topmargin 2cm
+\rightmargin 2cm
+\bottommargin 2cm
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation skip
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle empty
+
+\layout Title
+
+TREMULOUS 1.0.2
+\layout Standard
+
+
+\begin_inset LatexCommand \tableofcontents{}
+
+\end_inset
+
+
+\layout Section
+
+Introduction
+\layout Standard
+
+Tremulous is a first person shooter featuring two opposing teams, humans
+ and aliens.
+ Both teams are able to build structures such as spawn points, which are
+ vital to their victory.
+ The goal of Tremulous is to eliminate the opposing team and all of their
+ spawn points.
+\layout Standard
+
+Each team in Tremulous differs fundamentally from the other.
+ The aliens are class based, with two classes initially available: the alien
+ team's builder, known as the Granger, and the Dretch, the weakest offensive
+ alien.
+ The aliens are awarded frags for killing their foes which may be used to
+ evolve into stronger classes, capable of greater and more varied maneuvers.
+ In contrast the human team is upgrade based, receiving credits for kills
+ that may be exchanged at an Armoury structure for new weapons, armour and
+ equipment.
+ Two such upgrades are available for free: a rifle and a construction kit,
+ used for building structures.
+\layout Standard
+
+During a game of Tremulous, each team occupies one of three stages of developmen
+t.
+ These stages are reached by accruing more than a specific total number
+ of kills by the whole team.
+ Each new stage unlocks new classes, upgrades and buildable structures.
+ If one team reaches a stage significantly earlier than the other team it
+ stands a better chance of defeating the opposing team.
+\layout Standard
+
+Section
+\begin_inset LatexCommand \ref{sec:Game}
+
+\end_inset
+
+ details the content of the game including the various controls that are
+ used to play.
+ Section
+\begin_inset LatexCommand \ref{sec:Technical}
+
+\end_inset
+
+ describes some technical aspects of how Tremulous works.
+ It is not necessary to read this section in order to play the game.
+\layout Section
+
+
+\begin_inset LatexCommand \label{sec:Game}
+
+\end_inset
+
+Game
+\layout Subsection
+
+Aliens
+\layout Standard
+
+Two classes are available upon joining the alien team: the Dretch and the
+ Granger.
+ As you gain kills, you may use your earned frags to evolve into higher
+ classes with the
+\noun on
+Use Structure/Evolve
+\noun default
+ button.
+ The alien team is mostly limited to melee attacks and must use stealth
+ and speed to defeat the longer range humans.
+ All aliens automatically regenerate health at a slow rate.
+\layout Subsubsection
+
+Classes
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Granger
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename granger.jpg
+ scale 85
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Cost: 0
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 1
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="3">
+<features>
+<column alignment="left" valignment="top" rightline="true" width="0">
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Ability
+\end_inset
+</cell>
+<cell multicolumn="1" alignment="left" valignment="top" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Control
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Build
+\end_inset
+</cell>
+<cell multicolumn="1" alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Primary Attack
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Destroy Structure
+\end_inset
+</cell>
+<cell multicolumn="1" alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Deconstruct Structure
+\noun default
+ on an alien structure
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Granger
+\emph default
+ is the alien team's builder class.
+
+\noun on
+Primary Attack
+\noun default
+ will bring up a menu of structures available for building.
+ After selecting a structure a glowing outline of it will appear.
+ When this outline is green you can use the
+\noun on
+Primary Attack
+\noun default
+ button to place it.
+ The outline changes to red when the structure cannot be placed in its current
+ location.
+ To cancel placing the structure press the
+\noun on
+Secondary Attack
+\noun default
+ button.
+ To remove a placed structure use the
+\noun on
+Deconstruct Structure
+\noun default
+ button.
+ After building or deconstructing a structure a timer will appear in the
+ lower right corner of the screen.
+ Until this timer expires you cannot create or destroy another building.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Advanced Granger
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename agranger.jpg
+ scale 85
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Cost: 0
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 2
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="6" columns="2">
+<features>
+<column alignment="left" valignment="top" rightline="true" width="0">
+<column alignment="left" valignment="top" width="0">
+<row bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Ability
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Control
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Build
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Primary Attack
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Slash
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Secondary Attack
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Lob Projectile
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Activate Upgrade
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Destroy Structure
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Deconstruct Structure
+\noun default
+on an alien structure
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Wallwalk
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Crouch
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Advanced Granger
+\emph default
+ becomes available at no cost when the alien team reaches stage two.
+ In addition to the
+\emph on
+Granger's
+\emph default
+ abilities, the
+\emph on
+Advanced Granger
+\emph default
+ can move faster, jump higher, walk on walls and attack with a slash or
+ by lobbing small projectiles with the
+\noun on
+Activate Upgrade
+\noun default
+ button.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Dretch
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename dretch.jpg
+ scale 75
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Cost: 0
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 1
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" rightline="true" width="0">
+<column alignment="left" valignment="top" width="0">
+<row bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Ability
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Control
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Bite
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Touch a human
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Wallwalk
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Crouch
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Dretch
+\emph default
+ is the alien team's weakest offensive class.
+ Its only attack is to make forward contact with a human player or human
+ defensive structure.
+ The amount of damage dealt to a human depends on what armour they were
+ wearing and where they were hit, with headshots resulting in the most damage.
+
+\emph on
+Dretches
+\emph default
+ can also wallwalk; toggle it by pressing the
+\noun on
+Crouch
+\noun default
+ button.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Basilisk
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename basilisk.jpg
+ scale 85
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Cost: 1
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 1
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="4" columns="2">
+<features>
+<column alignment="left" valignment="top" rightline="true" width="0">
+<column alignment="left" valignment="top" width="0">
+<row bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Ability
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Control
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Slash
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Primary Attack
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Grab
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Touch a human
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Wallwalk
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Crouch
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Basilisk
+\emph default
+ attacks by using the
+\noun on
+Primary Attack
+\noun default
+ button.
+ It can also grab human players by making contact with them at close range.
+ This freezes humans in place and, if they're not wearing a
+\emph on
+Battlesuit
+\emph default
+, restricts their ability to turn.
+ The
+\emph on
+Basilisk
+\emph default
+ can also wallwalk; toggle it by pressing the
+\noun on
+Crouch
+\noun default
+ button.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Advanced Basilisk
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename abasilisk.jpg
+ scale 85
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Cost: 2
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 2
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="5" columns="2">
+<features>
+<column alignment="left" valignment="top" rightline="true" width="0">
+<column alignment="left" valignment="top" width="0">
+<row bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Ability
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Control
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Slash
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Primary Attack
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Gas
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Secondary Attack
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Grab
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Touch a human
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Wallwalk
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Crouch
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+In addition to the
+\emph on
+Basilisk's
+\emph default
+ abilities, the
+\emph on
+Advanced Basilisk
+\emph default
+ can spray a cloud of noxious gas that will disorient and poison affected
+ human players.
+ Humans equipped with a
+\emph on
+Battlesuit
+\emph default
+ are immune to gas.
+ Use this ability with the
+\noun on
+Secondary Attack
+\noun default
+ button.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Marauder
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename marauder.jpg
+ scale 75
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Cost: 2
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 1
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" rightline="true" width="0">
+<column alignment="left" valignment="top" width="0">
+<row bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Ability
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Control
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Bite
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Primary Attack
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Wall Jump
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Jump into a wall while holding down
+\noun on
+Jump
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Marauder
+\emph default
+ attacks with the
+\noun on
+Primary Attack
+\noun default
+ button and has the ability to rebound off walls.
+ To use this ability jump towards a wall and hold down the
+\noun on
+Jump
+\noun default
+ button.
+ When you hit the wall you will be propelled upward and in the direction
+ opposite of the wall.
+ As long as you continue hitting walls you will continue wall jumping.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Advanced Marauder
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename amarauder.jpg
+ scale 75
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Cost: 3
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 2
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="4" columns="2">
+<features>
+<column alignment="left" valignment="top" rightline="true" width="0">
+<column alignment="left" valignment="top" width="0">
+<row bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Ability
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Control
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Bite
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Primary Attack
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Zap
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Secondary Attack
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Wall Jump
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Jump into a wall while holding down
+\noun on
+Jump
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+In addition to the
+\emph on
+Marauder's
+\emph default
+ abilities, the
+\emph on
+Advanced Marauder
+\emph default
+ can use a chain lightning attack.
+ To use this, press the
+\noun on
+Secondary Attack
+\noun default
+ button while aiming at a nearby human or human structure.
+ If it connects the electric shock will jump to up to two other nearby targets
+ doing full damage to the first, half damage to the second and one third
+ damage to the third over a period of one second provided the attacker stays
+ within range.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Dragoon
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename dragoon.jpg
+ scale 85
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Cost: 3
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 1
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" rightline="true" width="0">
+<column alignment="left" valignment="top" width="0">
+<row bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Ability
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Control
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Bite
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Primary Attack
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Pounce
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Hold down
+\noun on
+Secondary Attack
+\noun default
+ briefly then release
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Dragoon
+\emph default
+ attacks by either biting with the
+\noun on
+Primary Attack
+\noun default
+ button or pouncing with
+\noun on
+Secondary Attack
+\noun default
+.
+ To pounce, first hold down the
+\noun on
+Secondary Attack
+\noun default
+ button to charge up, then release to leap forward and damage anything that
+ gets in the way.
+ While charging you will be unable to jump normally and will move at a reduced
+ rate.
+ Aim up a little to fly further when pouncing.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Advanced Dragoon
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename adragoon.jpg
+ scale 85
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Cost: 4
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 3
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="4" columns="2">
+<features>
+<column alignment="left" valignment="top" rightline="true" width="0">
+<column alignment="left" valignment="top" width="0">
+<row bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Ability
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Control
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Bite
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Primary Attack
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Pounce
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Hold down
+\noun on
+Secondary Attack
+\noun default
+ briefly then release
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Shoot Barb
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Activate Upgrade
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+In addition to the
+\emph on
+Dragoon's
+\emph default
+ abilities, the
+\emph on
+Advanced Dragoon
+\emph default
+ can fire long ranged spiked barbs with the
+\noun on
+Activate Upgrade
+\noun default
+ button.
+ Up to three of these barbs may be held in reserve and they regenerate automatic
+ally over time.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Tyrant
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename tyrant.jpg
+ scale 85
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Cost: 5
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 3
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="4" columns="2">
+<features>
+<column alignment="left" valignment="top" rightline="true" width="0">
+<column alignment="left" valignment="top" width="0">
+<row bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Ability
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Control
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Slash
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Primary Attack
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Trample
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Hold down
+\noun on
+Secondary Attack
+\noun default
+ briefly then release
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Healing Aura
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stand close to teammates to increase their regeneration rate
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Tyrant
+\emph default
+ attacks by either slashing with the
+\noun on
+Primary Attack
+\noun default
+ button or trampling with
+\noun on
+Secondary Attack
+\noun default
+.
+ To trample, first hold down the
+\noun on
+Secondary Attack
+\noun default
+ button while moving forward to charge up, then release to run at high speed
+ for a short time, damaging anything in your path.
+ The
+\emph on
+Tyrant
+\emph default
+ also has a healing aura that will double the regeneration rate of lower
+ class aliens within range.
+\layout Subsubsection
+
+Structures
+\layout Standard
+
+All alien structures must be built in proximity to an
+\emph on
+Egg
+\emph default
+ or an
+\emph on
+Overmind
+\emph default
+.
+ All alien structures require the presence of an
+\emph on
+ Overmind
+\emph default
+ to function.
+ All alien structures create `creep' around their bases that slows human
+ movement.
+ When destroyed, alien structures explode in a shower of acid harmful to
+ humans.
+ All structures may be built on level floors and when
+\emph on
+Advanced Grangers
+\emph default
+ become available some structures may also be built on walls and ceilings.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Overmind
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename overmind.jpg
+ scale 75
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Sentience: 0
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 1
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Overmind
+\emph default
+ is the collective consciousness that controls all the alien structures
+ in a map and enables aliens to evolve into higher forms.
+ There can only be one
+\emph on
+Overmind
+\emph default
+ and it must be alive before any other structures can be built.
+ If the
+\emph on
+Overmind
+\emph default
+ is destroyed then all structures besides
+\emph on
+Eggs
+\emph default
+ cease to function and every alien loses the ability to upgrade their class
+ until a new
+\emph on
+Overmind
+\emph default
+ is built.
+ The
+\emph on
+Overmind
+\emph default
+ has a limited amount of `sentience' which is distributed amongst every
+ other structure built, each having its own cost.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Egg
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename egg.jpg
+ scale 85
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Sentience: 10
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 1
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Egg
+\emph default
+ is the most basic and important alien structure; it is from these that
+ aliens spawn into the game.
+ They are also the only structure that continues to function in the absence
+ of an
+\emph on
+Overmind
+\emph default
+.
+
+\emph on
+Eggs
+\emph default
+ may be built on ceilings.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Acid Tube
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename acidtube.jpg
+ scale 85
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Sentience: 8
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 1
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+
+\emph on
+Acid Tubes
+\emph default
+ are the primary defensive structure for the alien team.
+ When approached by a human they eject lethal acid in all directions, even
+ over other structures.
+
+\emph on
+ Acid Tubes
+\emph default
+ may be built on walls and ceilings.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Barricade
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename barricade.jpg
+ scale 75
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Sentience: 10
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 1
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+
+\emph on
+Barricades
+\emph default
+ are used to obstruct corridors and doorways, hindering human movement and
+ line-of-sight.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Trapper
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename trapper.jpg
+ scale 75
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Sentience: 10
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 2
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+
+\emph on
+Trappers
+\emph default
+ fire a blob of adhesive spit at any human in their line of sight, freezing
+ them in place and, if they're not wearing a
+\emph on
+Battlesuit
+\emph default
+, restricts their ability to turn.
+
+\emph on
+ Trappers
+\emph default
+ may be built on walls and ceilings, and are rarely effective when built
+ on floors.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Booster
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename booster.jpg
+ scale 85
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Sentience: 12
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 2
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+Any alien that touches a
+\emph on
+Booster
+\emph default
+ is provided with a poison enhancement on all their melee attacks for a
+ limited time.
+ Poison causes victims to lose health steadily over time unless they use
+ a
+\emph on
+ Medkit
+\emph default
+ or visit a
+\emph on
+Medistation
+\emph default
+.
+ Poison does not work against humans equipped with a
+\emph on
+Battlesuit
+\emph default
+.
+ The
+\emph on
+Booster
+\emph default
+ will also double the regeneration rate of any nearby aliens with the exception
+ of
+\emph on
+ Tyrants
+\emph default
+.
+ The healing aura of a
+\emph on
+ Tyrant
+\emph off
+
+\emph default
+i
+\emph off
+s not
+\emph default
+cumulative
+\emph off
+ with the healing effect of boosters.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Hovel
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename hovel.jpg
+ scale 85
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Sentience: 8
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 3
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+
+\emph on
+Hovels
+\emph default
+ are armored shells that
+\emph on
+Grangers
+\emph default
+ may hide in should the need arise.
+ They may be entered and exited with the
+\noun on
+Use Structure/Evolve
+\noun default
+ button.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Hive
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename hive.jpg
+ scale 85
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Sentience: 12
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 3
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+
+\emph on
+Hives
+\emph default
+ house millions of tiny insectoid aliens.
+ When a human approaches the structure the insects attack.
+
+\emph on
+Hives
+\emph default
+ may be built on ceilings.
+\layout Subsection
+
+Humans
+\layout Subsubsection
+
+Weapons
+\layout Standard
+
+Humans may spawn with either the
+\emph on
+Construction Kit
+\emph default
+ or the
+\emph on
+Rifle
+\emph default
+.
+ As credits are earned, humans may sell their old upgrades and purchase
+ new ones at an
+\emph on
+Armoury
+\emph default
+ structure.
+ Ammo may be refilled for normal weapons at
+\emph on
+Armouries
+\emph default
+, or at
+\emph on
+Reactors
+\emph default
+ and
+\emph on
+Repeaters
+\emph default
+ for energy weapons, all at no cost.
+ Players may only carry one weapon at a time, excluding the
+\emph on
+Blaster
+\emph default
+.
+ In general the humans rely on long range weapons to make up for their lack
+ of mobility relative to the alien team.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Construction Kit
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename ckit.jpg
+ scale 75
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Cost: 0
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 1
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Construction Kit
+\emph default
+ is the humans' method of building structures.
+ The
+\noun on
+Primary
+\noun default
+
+\noun on
+Attack
+\noun default
+ button will bring up a menu of structures available for building.
+ After selecting a structure, a glowing outline of it will appear.
+ When this outline is green, pressing the
+\noun on
+Primary Attack
+\noun default
+ button will place it.
+ When the outline is red, the structure cannot be placed in its current
+ location.
+ To cancel placing the structure, press the
+\noun on
+Secondary Attack
+\noun default
+ button.
+ To remove a placed structure, use the
+\noun on
+Deconstruct Structure
+\noun default
+ button.
+ After building or deconstructing a structure, a timer will show up in the
+ lower right corner of the screen.
+ Until this timer expires, you cannot create, destroy or repair any structures.
+ Damaged structures may otherwise be repaired with the
+\noun on
+Secondary Attack
+\noun default
+ button.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Advanced Construction Kit
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename ackit.jpg
+ scale 75
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Cost: 0
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 2
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+At stage two an upgraded
+\emph on
+Construction Kit
+\emph default
+ becomes available that allows the building of more advanced structures.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Blaster
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename blaster.jpg
+ scale 75
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Cost: 0
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 1
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Blaster
+\emph default
+ is the human team's standard issue backup weapon.
+ All players spawn with one automatically and may not exchange it for another
+ weapon.
+ The
+\emph on
+Blaster
+\emph default
+ fires a weak projectile and uses no ammo.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Rifle
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename rifle.jpg
+ scale 75
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Cost: 0
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 1
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Rifle
+\emph default
+ is the human team's most basic weapon and is available from spawning.
+ It rapidly fires moderately accurate shots with clip sizes of 30.
+ Up to 6 extra clips may be carried at a time.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Pain Saw
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename psaw.jpg
+ scale 85
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Cost: 100
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 1
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Pain Saw
+\emph default
+ is a powerful melee weapon that emits a steady electric hum when in use.
+ It uses no ammunition.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Shotgun
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename shotgun.jpg
+ scale 85
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Cost: 150
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 1
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Shotgun
+\emph default
+ fires 8 pellets at a wide angle and is thus best used in close quarters.
+ It holds 8 shots per clip and 3 extra clips may be carried at a time.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Las Gun
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename lasgun.jpg
+ scale 85
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Cost: 250
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 1
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Las Gun
+\emph default
+ is similar to the
+\emph on
+Rifle
+\emph default
+ but is more powerful, accurate, slower to fire and uses no clips.
+ It is an energy weapon and so must be refilled at a
+\emph on
+Reactor
+\emph default
+ or
+\emph on
+Repeater
+\emph default
+.
+ It can hold up to 200 cells at a time, or 300 with a
+\emph on
+Battery Pack
+\emph default
+.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Mass Driver
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename mdriver.jpg
+ scale 85
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Cost: 350
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 1
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Mass Driver
+\emph default
+ fires powerful, accurate shots at a slow rate of fire.
+ It is an energy weapon and holds 5 shots per clip, or 7 with a
+\emph on
+Battery Pack
+\emph default
+.
+ Up to 4 extra clips may be carried at a time.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Chaingun
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename chaingun.jpg
+ scale 85
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Cost: 400
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 1
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Chaingun
+\emph default
+ is a powerful, wildly inaccurate rapid-fire weapon.
+ It holds up to 300 bullets at a time and is best used when crouching to
+ reduce its kickback.
+ Humans equipped with a
+\emph on
+Battlesuit
+\emph default
+do not experience this kickback.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Pulse Rifle
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename prifle.jpg
+ scale 85
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Cost: 400
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 2
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Pulse Rifle
+\emph default
+ is an energy weapon that fires projectiles at high speeds.
+ It holds up to 50 cells per clip, or 75 with a
+\emph on
+Battery Pack
+\emph default
+.
+ Up to 4 extra clips may be carried at a time.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Grenade
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename grenade.jpg
+ scale 75
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Cost: 200
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 2
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Grenade
+\emph default
+ is a hand held explosive device.
+ It is thrown for a short distance by using the
+\noun on
+Activate Upgrade
+\noun default
+ button.
+ After a brief delay it will explode and cause tremendous damage to anything
+ in its area of effect.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Flamethrower
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename flamer.jpg
+ scale 85
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Cost: 450
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 3
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Flamethrower
+\emph default
+ is a short range incendiary weapon.
+ It holds up to 150 shots at a time and can easily damage the careless wielder.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Lucifer Cannon
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename lcannon.jpg
+ scale 85
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Cost: 600
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 3
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Lucifer Cannon
+\emph default
+ is the human team's most devastating weapon.
+ It is an energy weapon that can hold up to 90 cells at a time, or 135 with
+ a
+\emph on
+Battery Pack
+\emph default
+.
+ By holding down the
+\noun on
+Primary Attack
+\noun default
+ button, a player may charge up a powerful, slow moving projectile with
+ splash damage.
+ The longer the attack is charged the more powerful the projectile and the
+ more ammo used.
+ If the attack is charged for too long the weapon will explode, damaging
+ the player.
+ The
+\noun on
+Secondary Attack
+\noun default
+button fires a smaller projectile that requires no charging.
+\layout Subsubsection
+
+Upgrades
+\layout Standard
+
+Human players may equip themselves with any number of the following upgrades,
+ with a few exceptions: the
+\emph on
+Jet Pack
+\emph default
+ and
+\emph on
+Battery Pack
+\emph default
+ may not be used together and the
+\emph on
+Battlesuit
+\emph default
+ may not be used with the
+\emph on
+Jet Pack
+\emph default
+,
+\emph on
+Battery Pack
+\emph default
+,
+\emph on
+Light Armour
+\emph default
+, or
+\emph on
+Helmet
+\emph default
+.
+ Only one of any type of upgrade may be carried at a time.
+ Upgrades that do not grant an intrinsic effect must be selected in the
+ player's inventory with the
+\noun on
+Next Upgrade
+\noun default
+ and
+\noun on
+Previous Upgrade
+\noun default
+ buttons and then activated with the
+\noun on
+Activate Upgrade
+\noun default
+ button.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Light Armour
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename larmour.jpg
+ scale 75
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Cost: 70
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 1
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+
+\emph on
+Light Armour
+\emph default
+ grants the wearer improved defense to the torso and leg areas.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Helmet
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename helmet.jpg
+ scale 85
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Cost: 90
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 2
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Helmet
+\emph default
+ improves the defense of the wearer's head and also displays a radar that
+ shows the relative positions of nearby enemies and enemy structures.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="2" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Medkit
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Cost: 0
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 1
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+
+\emph on
+Medkits
+\emph default
+ are a free holdable given to every human upon spawning and refilled at
+\emph on
+ Medistations
+\emph default
+ to players with full health.
+ They may not be refilled or exchanged at
+\emph on
+ Armouries
+\emph default
+.
+ When used with the
+\noun on
+ Activate Upgrade
+\noun default
+ button,
+\emph on
+ Medkits
+\emph default
+ immediately begin restoring health at a slow rate, gradually speeding up
+ until all damage incurred before the
+\emph on
+ Medkit
+\emph default
+ was activated is healed.
+ Additionally, if a human is poisoned, using a
+\emph on
+ Medkit
+\emph default
+ will cure the poison and confer a 30 second immunity to poison.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Battery Pack
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename battpack.jpg
+ scale 75
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Cost: 100
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 1
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Battery Pack
+\emph default
+ increases the maximum ammo capacity of energy weapons by 50%.
+ It may not be used in conjunction with the
+\emph on
+Jet Pack
+\emph default
+.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Jet Pack
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename jetpack.jpg
+ scale 75
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Cost: 120
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 2
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Jet Pack
+\emph default
+ grants the wearer the power of slow but unlimited flight.
+ When activated with the
+\noun on
+Activate Upgrade
+\noun default
+ button, a player may ascend or descend using the
+\noun on
+Jump
+\noun default
+ or
+\noun on
+Crouch
+\noun default
+ buttons, respectively.
+ The
+\emph on
+Jet Pack
+\emph default
+ ceases to function if there is no operational
+\emph on
+Reactor
+\emph default
+present.
+ Additionally it temporarily cuts out if the player receives any damage.
+ The
+\emph on
+Jet Pack
+\emph default
+ may not be used in conjunction with the
+\emph on
+Battery Pack
+\emph default
+.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Battlesuit
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename bsuit.jpg
+ scale 85
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Cost: 400
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 3
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Battlesuit
+\emph default
+ provides a significant defensive boost to the wearer's entire body.
+ Due to this coverage, the
+\emph on
+Battlesuit
+\emph default
+ may not be used in conjunction with any other wearable upgrade (
+\emph on
+Light Armour
+\emph default
+,
+\emph on
+Helmet
+\emph default
+,
+\emph on
+Battery Pack
+\emph default
+, and
+\emph on
+Jet Pack
+\emph default
+).
+ Players are also prevented from crouching while wearing Battlesuits.
+\layout Subsubsection
+
+Structures
+\layout Standard
+
+All human structures must be built in proximity to a
+\emph on
+Reactor
+\emph default
+ or a
+\emph on
+Repeater
+\emph default
+.
+ With
+\emph on
+Telenodes
+\emph default
+ as the only exception, all structures require the presence of a working
+
+\emph on
+Reactor
+\emph default
+ to function.
+ All human structures explode in a powerful blast harmful to anything within
+ their radius when destroyed.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Reactor
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename reactor.jpg
+ scale 75
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Power: 0
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 1
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Reactor
+\emph default
+ is the power source for all human structures in a map.
+ There may only be one
+\emph on
+Reactor
+\emph default
+, and it must be present before any structures other than
+\emph on
+ Repeaters
+\emph default
+ can be built.
+ If the
+\emph on
+Reactor
+\emph default
+ is destroyed then all structures besides
+\emph on
+Telenodes
+\emph default
+ cease to function.
+ The
+\emph on
+Reactor
+\emph default
+ has a limited amount of power which is distributed among every other structure
+ built, each having its own cost.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Telenode
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename telenode.jpg
+ scale 85
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Power: 10
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 1
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Telenode
+\emph default
+ is the most basic and fundamental human structure; it is from these that
+ humans spawn into the game.
+ They are also the only structure that continues to function in the absence
+ of a
+\emph on
+ Reactor
+\emph default
+.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Machine Gun Turret
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename turret.jpg
+ scale 85
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Power: 8
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 1
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Machine Gun Turret
+\emph default
+ is the primary defensive structure for the human team.
+ While they have a clear line of sight to an alien within their range, they
+ will track and fire at the alien until it is dead.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Tesla Generator
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename tesla.jpg
+ scale 80
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Power: 10
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 3
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+
+\emph on
+Tesla Generators
+\emph default
+ are a defensive structure that will unconditionally hit any target within
+ their range and line of sight with an electrical surge.
+ To be built and function, a
+\emph on
+Tesla Generator
+\emph default
+ requires the presence of a
+\emph on
+Defense Computer
+\emph default
+ somewhere in the map.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Armoury
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename armoury.jpg
+ scale 85
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Power: 10
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 1
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Armoury
+\emph default
+ is an essential part of every human base, allowing upgrades beyond the
+ basic spawning equipment to be bought and exchanged.
+ It is the sole means of human advancement.
+ To use an
+\emph on
+Armoury
+\emph default
+, approach it and press the
+\noun on
+Use Structure/Evolve
+\noun default
+ button.
+ Ammo for non-energy weapons may also be acquired at no cost from an
+\emph on
+Armoury
+\emph default
+ by using the
+\noun on
+Buy Ammo
+\noun default
+ button.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Defense Computer
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename dcc.jpg
+ scale 85
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Power: 8
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 2
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+
+\emph on
+Defense Computers
+\emph default
+ coordinate the attacks of
+\emph on
+Machine Gun Turrets
+\emph default
+, preventing them from firing at a single target when multiple targets are
+ available.
+ They are also required for the production of
+\emph on
+Tesla Generators
+\emph default
+.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Medistation
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename medistat.jpg
+ scale 85
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Power: 8
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 1
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+The
+\emph on
+Medistation
+\emph default
+ provides the only means for humans to heal themselves.
+ By standing on one, a human will quickly regenerate health up to their
+ maximum of 100.
+
+\emph on
+ Medistations
+\emph default
+ will also refill
+\emph on
+ Medkits
+\emph default
+ to humans with full health.
+ Only one person may use a
+\emph on
+Medistation
+\emph default
+ at a time.
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="right" valignment="top" width="0">
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+Repeater
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\begin_inset Graphics
+ filename repeater.jpg
+ scale 85
+
+\end_inset
+
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Power: 0
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Stage: 2
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+
+\emph on
+Repeaters
+\emph default
+ serve as power distributors that may be built anywhere not already powered,
+ even when no
+\emph on
+Reactor
+\emph default
+ is present.
+ Any other structure may be built in proximity to a working
+\emph on
+Repeater
+\emph default
+ as if it were a
+\emph on
+Reactor
+\emph default
+.
+ If a
+\emph on
+Repeater
+\emph default
+ powers nothing for 90 seconds, it will automatically self destruct.
+\layout Section
+
+
+\begin_inset LatexCommand \label{sec:Technical}
+
+\end_inset
+
+Technical
+\layout Subsection
+
+Bindings
+\layout Standard
+\align center
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="22" columns="3">
+<features islongtable="true">
+<column alignment="block" valignment="top" rightline="true" width="4cm">
+<column alignment="block" valignment="top" rightline="true" width="4cm">
+<column alignment="block" valignment="top" width="5.5cm">
+<row bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Name in menu
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Binding
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Function
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Primary Attack
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold
++attack
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Use primary attack function.
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Secondary Attack
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold
++button5
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Use secondary attack function.
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Previous Upgrade
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold
+weapprev
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+As human, preselect the previous upgrade in your inventory.
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Next Upgrade
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold
+weapnext
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+As human, preselect the next upgrade in your inventory.
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Activate Upgrade
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold
++button2
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+As human, activate the current preselected inventory item.
+ Also used for some alien abilities.
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Reload
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold
+reload
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+As human, reload the selected weapon.
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Buy Ammo
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold
+buy ammo
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+As human, buy ammo from an
+\emph on
+armoury
+\emph default
+,
+\emph on
+repeater
+\emph default
+ or
+\emph on
+reactor
+\emph default
+.
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Use Medkit
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold
+itemact medkit
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+As human, activate your
+\emph on
+Medkit
+\emph default
+.
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Use Structure/Evolve
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold
++button7
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+As human, use the structure in front of the player.
+ As alien, evolve into a different class.
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Deconstruct Structure
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold
+deconstruct
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+As a builder class, deconstruct the structure in front of the player cleanly.
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\noun on
+Sprint
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold
+boost
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Run faster.
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+--
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold
+destroy
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+As a builder class, destroy the structure in front of the player.
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+--
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold
+itemact <item>
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+If held, activate the specified item.
+ For weapons this will select them.
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+--
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold
+itemdeact <item>
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+If held, deactivate the specified item.
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+--
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold
+itemtoggle <item>
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+If held, toggle the state of the specified item.
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+--
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold
+sell <item>
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+If held and within range of an
+\emph on
+armoury
+\emph default
+, sell the specified item.
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+--
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold
+sell weapons
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+If within range of an
+\emph on
+armoury
+\emph default
+, sell all weapons.
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+--
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold
+sell upgrades
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+If within range of an
+\emph on
+armoury
+\emph default
+, sell all upgrades.
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+--
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold
+buy <item>
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+If within range of an
+\emph on
+armoury
+\emph default
+ and sufficiently wealthy, buy the specified item.
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+--
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold
+class <class>
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Given sufficient kills, evolve to the specified class.
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+--
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold
+build <structure>
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+As a builder class, build the specified structure.
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\layout Standard
+
+
+\series bold
+<item>
+\series default
+ --
+\emph on
+blaster, rifle, ckit, ackit, shotgun, lgun, prifle, mdriver, flamer, chaingun,
+ lcannon, psaw, gren, medkit, jetpack
+\layout Standard
+
+
+\series bold
+<class>
+\series default
+ --
+\emph on
+builder, builderupg, level0, level1, level1upg, level2, level2upg, level3,
+ level3upg, level4
+\layout Standard
+
+
+\series bold
+<structure>
+\series default
+ --
+\emph on
+eggpod, barricade, booster, acid_tube, hive, trapper, overmind, hovel, telenode,
+ medistat, mgturret, tesla, dcc, arm, reactor, repeater
+\layout Subsection
+
+Particle System
+\layout Standard
+
+Files matching the pattern scripts/*.particle are loaded as particle system
+ description files.
+ Each .particle file can contain an arbitrary number of discrete particle
+ systems, much like a .shader file can house many shaders.
+ A particle system is declared by a name followed by curly braces within
+ which the functionality of the particle system is defined.
+ For example:
+\layout LyX-Code
+
+aShinyNewParticleSystem { }
+\layout Standard
+
+Inside the particle system declaration are placed up to four particle ejectors.
+ Ejectors are identified by the keyword ejector and curly braces:
+\layout LyX-Code
+
+aShinyNewParticleSystem
+\layout LyX-Code
+
+{
+\layout LyX-Code
+
+ ejector { }
+\layout LyX-Code
+
+ ejector { }
+\layout LyX-Code
+
+}
+\layout Standard
+
+The role of the particle ejector is to create some number of new particles
+ at a defined rate.
+ These attributes are controlled by the following parameters:
+\layout Itemize
+
+
+\emph on
+count <number>|infinite
+\emph default
+ - the number of particles this ejector will spawn.
+\layout Itemize
+
+
+\emph on
+delay <msec>
+\emph default
+ - the delay in msec before the ejector starts spawning.
+\layout Itemize
+
+
+\emph on
+period <initial> <final> <variance>
+\emph default
+ - the period between particle ejections.
+\layout Standard
+
+It is perfectly acceptable to have an initial period of zero.
+ In this case the number of particles specified by the count keyword will
+ be ejected at once.
+ It is not permissible to have count infinite and a period of zero for obvious
+ reasons.
+\layout Standard
+
+At ejection time each ejector creates up to four new particles based on
+ templates.
+ These are specified in the ejector section using the particle keyword:
+\layout LyX-Code
+
+aShinyNewParticleSystem
+\layout LyX-Code
+
+{
+\layout LyX-Code
+
+ ejector
+\layout LyX-Code
+
+ {
+\layout LyX-Code
+
+ particle { }
+\layout LyX-Code
+
+ particle { }
+\layout LyX-Code
+
+ count 50
+\layout LyX-Code
+
+ delay 0
+\layout LyX-Code
+
+ period 0 - 0
+\layout LyX-Code
+
+ }
+\layout LyX-Code
+
+}
+\layout Standard
+
+Each particle template has a number of attributes:
+\layout Itemize
+
+
+\emph on
+shader <fps>|sync <shader1> <shader2> ...
+ <shaderN>
+\emph default
+ - this specifies the shaders to use for the particle.
+ The frame rate can be set to a static rate or the
+\emph on
+sync
+\emph default
+ parameter can be used in which case the frame rate will be synchronised
+ to the lifetime of the particle such that the first frame is displayed
+ on birth and the last frame is displayed immediately before death.
+\layout Itemize
+
+
+\emph on
+displacement <x> <y> <z> <variance>
+\emph default
+ - a static displacement about the attachment point.
+ The
+\emph on
+variance
+\emph default
+ parameter specifies a random displacement in all axes.
+\layout Itemize
+
+
+\emph on
+normalDisplacement <displacement>
+\emph default
+ - for particle systems that have their normal set (impact particle systems
+ for example) this specifies the magnitude of a displacement along the normal.
+\layout Itemize
+
+
+\emph on
+velocityType static|tag|cent|normal
+\emph default
+ - this specifies how the particle will compute its initial velocity.
+
+\emph on
+static
+\emph default
+ means it is specified statically in the .particle file,
+\emph on
+tag
+\emph default
+ means the velocity is in the direction of the tag it is attached to,
+\emph on
+cent
+\emph default
+ means the velocity is in the direction of the cent it is attached to and
+
+\emph on
+normal
+\emph default
+ means the velocity is in the direction of the particle system normal.
+\layout Itemize
+
+
+\emph on
+velocityDir linear|point
+\emph default
+ - this specifies whether the initial velocity is computed as a simple direction
+ or as the direction towards a secondary point (defined by
+\emph on
+velocityPoint
+\emph default
+ or dynamically through
+\emph on
+velocityType cent
+\emph default
+).
+\layout Itemize
+
+
+\emph on
+velocity <x> <y> <z> <variance>
+\emph default
+ - for when
+\emph on
+velocityType
+\emph default
+
+\emph on
+static
+\emph default
+ is present this specifies the direction.
+ The
+\emph on
+variance
+\emph default
+ here is specified in degrees e.g.
+ "~5" - up to 5 degrees deviation.
+\layout Itemize
+
+
+\emph on
+velocityMagnitude <magnitude>
+\emph default
+ - the magnitude of the velocity.
+\layout Itemize
+
+
+\emph on
+velocityPoint <x> <y> <z> <variance>
+\emph default
+ - for when
+\emph on
+velocityType static
+\emph default
+ and
+\emph on
+velocityDir point
+\emph default
+ are present this specifies the point to move towards.
+\layout Itemize
+
+
+\emph on
+parentVelocityFraction <fraction>
+\emph default
+ - for when the particle system is attached to a cent this specifies the
+ fraction of the cent's velocity that is added to the particle's velocity.
+\layout Itemize
+
+
+\emph on
+accelerationType static|tag|cent|normal
+\emph default
+ - this specifies how the particle will compute its acceleration.
+
+\emph on
+static
+\emph default
+ means it is specified statically in the .particle file,
+\emph on
+tag
+\emph default
+ means the acceleration is in the direction of the tag it is attached to,
+
+\emph on
+cent
+\emph default
+ means the acceleration is in the direction of the cent it is attached to
+ and
+\emph on
+normal
+\emph default
+ means the acceleration is in the direction of the particle system normal.
+\layout Itemize
+
+
+\emph on
+accelerationDir linear|point
+\emph default
+ - this specifies whether the acceleration is computed as a simple direction
+ or as the direction towards a secondary point (defined by
+\emph on
+accelerationPoint
+\emph default
+ or dynamically through
+\emph on
+accelerationType cent
+\emph default
+).
+\layout Itemize
+
+
+\emph on
+acceleration <x> <y> <z> <variance>
+\emph default
+ - for when
+\emph on
+accelerationType
+\emph default
+ static is present this specifies the direction.
+ The
+\emph on
+variance
+\emph default
+ here is specified in degrees e.g.
+ "~5" - up to 5 degrees deviation.
+\layout Itemize
+
+
+\emph on
+accelerationMagnitude <magnitude>
+\emph default
+ - the magnitude of the acceleration.
+\layout Itemize
+
+
+\emph on
+accelerationPoint <x> <y> <z> <variance>
+\emph default
+ - for when
+\emph on
+accelerationType static
+\emph default
+ and
+\emph on
+accelerationDir point
+\emph default
+ are present this specifies the point to move towards.
+\layout Itemize
+
+
+\emph on
+bounce <fraction>|cull
+\emph default
+ - the fraction of velocity that is reflected when a particle collides.
+ If this is set to 0.0 the particle won't collide.
+ When
+\emph on
+cull
+\emph default
+ is used particles are culled as soon as they collide with objects.
+\layout Itemize
+
+
+\emph on
+overdrawProtection
+\emph default
+ - cull particles that occupy a large amount of screen space.
+\layout Itemize
+
+
+\emph on
+realLight
+\emph default
+ - light particles using the lightgrid instead of fullbright.
+\layout Itemize
+
+
+\emph on
+cullOnStartSolid
+\emph default
+ - cull particles that are spawned inside brushes.
+\layout Itemize
+
+
+\emph on
+radius <delay> <initial> <final>
+\emph default
+ - the radius of the particle throughout its lifetime.
+ The
+\emph on
+delay
+\emph default
+ parameter specifies the time in msec before radius scaling begins.
+ The
+\emph on
+initial
+\emph default
+ and
+\emph on
+final
+\emph default
+ parameters specify the radii of the particle in quake units.
+\layout Itemize
+
+
+\emph on
+alpha <delay> <initial> <final>
+\emph default
+ - the alpha of the particle throughout its lifetime.
+ The
+\emph on
+delay
+\emph default
+ parameter specifies the time in msec before alpha scaling begins.
+ The
+\emph on
+initial
+\emph default
+ and
+\emph on
+final
+\emph default
+ parameters specify the alpha of the particle where 1.0 is totally opaque
+ and 0.0 is totally transparent.
+\layout Itemize
+
+
+\emph on
+rotation <delay> <initial> <final>
+\emph default
+ - the rotation of the particle throughout its lifetime.
+ The
+\emph on
+delay
+\emph default
+ parameter specifies the time in msec before the rotation begins.
+ The
+\emph on
+initial
+\emph default
+ and
+\emph on
+final
+\emph default
+ parameters specify the rotation of the particle in degrees.
+\layout Itemize
+
+
+\emph on
+lifeTime <time>
+\emph default
+ - the lifetime of the particle.
+\layout Itemize
+
+
+\emph on
+childSystem <particle system>
+\emph default
+ - specifies a particle system to attach to this particle.
+\layout Itemize
+
+
+\emph on
+onDeathSystem <particle system>
+\emph default
+ - specifies a particle system to spawn at the point where this particle
+ died.
+\layout Standard
+
+Except for vector components,
+\emph on
+shader fps ...
+
+\emph default
+ and
+\emph on
+period <initial <final> <variance>
+\emph default
+, every value can be specified with a random variance.
+ The syntax for this is as follows:
+\layout LyX-Code
+
+[value][~variance[%]]
+\layout Standard
+
+So the following forms are possible, where random is a random number between
+ 0.0 and 1.0 inclusive:
+\layout LyX-Code
+
+5.0 // 5.0
+\layout LyX-Code
+
+5.0~8.0 // 5.0 + ( random * 8.0 )
+\layout LyX-Code
+
+5.0~200% // 5.0 + ( random * 5.0 * 200% )
+\layout LyX-Code
+
+~7.0 // random * 7.0
+\layout Standard
+
+This allows for relatively flexible randomisation of most of the particle's
+ parameters.
+ For parameters taking an initial and final value, specifying the final
+ value as '-' will result in a final value the same as the initial value.
+\layout Standard
+
+For the purposes of map based particle systems using
+\emph on
+misc_particle_system
+\emph default
+ it is safe to ignore
+\emph on
+velocityType
+\emph default
+ and
+\emph on
+accelerationType tag|cent|normal
+\emph default
+,
+\emph on
+normalDisplacement
+\emph default
+ and
+\emph on
+parentVelocityFraction
+\emph default
+ altogether.
+\layout Standard
+
+Of course, it is not necessary to specify every parameter documented here
+ for every particle system.
+ If a parameter is not included it will usually default to zero.
+ C/C++ style comments can be used throughout.
+ There are an enormous number of possible combinations of particle systems
+ parameters and as such it is impractical to test them all.
+ For this reason it is possible that certain permutations do not behave
+ as expected or wrongly.
+ In this case you may have discovered a bug - let us know.
+ Having said this when you're having problems with a particle system make
+ sure you scroll up the console and check that it compiled OK, I've written
+ the parser to be very intolerant of error.
+\layout Standard
+
+Here is an example particle system:
+\layout LyX-Code
+
+aShinyNewParticleSystem
+\layout LyX-Code
+
+{
+\layout LyX-Code
+
+ ejector
+\layout LyX-Code
+
+ {
+\layout LyX-Code
+
+ particle
+\layout LyX-Code
+
+ {
+\layout LyX-Code
+
+ shader sync shader1 shader2
+\layout LyX-Code
+
+
+\layout LyX-Code
+
+ velocityType static
+\layout LyX-Code
+
+ velocityDir linear
+\layout LyX-Code
+
+ velocityMagnitude 200
+\layout LyX-Code
+
+ velocity 0 0 1 ~30
+\layout LyX-Code
+
+\layout LyX-Code
+
+ accelerationType static
+\layout LyX-Code
+
+ accelerationDir linear
+\layout LyX-Code
+
+ accelerationMagnitude 50
+\layout LyX-Code
+
+ acceleration 0 0 1 ~0
+\layout LyX-Code
+
+\layout LyX-Code
+
+ radius 0 10.0 50.0
+\layout LyX-Code
+
+ alpha 0 1.0 1.0
+\layout LyX-Code
+
+ rotation 0 ~360 -
+\layout LyX-Code
+
+ bounce 0.4
+\layout LyX-Code
+
+ lifeTime 1500
+\layout LyX-Code
+
+ }
+\layout LyX-Code
+
+\layout LyX-Code
+
+ count 50
+\layout LyX-Code
+
+ delay 0
+\layout LyX-Code
+
+ period 0 - 0
+\layout LyX-Code
+
+ }
+\layout LyX-Code
+
+}
+\layout Subsection
+
+Map Rotation System
+\layout Standard
+
+The file
+\emph on
+maprotation.cfg
+\emph default
+ is used to describe up to 16 map rotations which may be used by a Tremulous
+ server.
+ In its most simple form, the syntax is as follows:
+\layout LyX-Code
+
+mapRotation1
+\layout LyX-Code
+
+{
+\layout LyX-Code
+
+ map1
+\layout LyX-Code
+
+ map2
+\layout LyX-Code
+
+ map3
+\layout LyX-Code
+
+}
+\layout LyX-Code
+
+\layout LyX-Code
+
+mapRotation2
+\layout LyX-Code
+
+{
+\layout LyX-Code
+
+ map6
+\layout LyX-Code
+
+ map3
+\layout LyX-Code
+
+ map9
+\layout LyX-Code
+
+}
+\layout Standard
+
+This specifies two rotations, each consisting of three maps.
+ The contents of the cvar
+\emph on
+g_initialMapRotation
+\emph default
+ specifies the map rotation to start after the map the server was started
+ with has finished.
+ It is possible to specify a list of server commands to be run after a map
+ has finished:
+\layout LyX-Code
+
+mapRotation3
+\layout LyX-Code
+
+{
+\layout LyX-Code
+
+ map1
+\layout LyX-Code
+
+ {
+\layout LyX-Code
+
+ set sv_hostname
+\begin_inset Quotes eld
+\end_inset
+
+Just finished map1!
+\begin_inset Quotes erd
+\end_inset
+
+
+\layout LyX-Code
+
+ set g_teamForceBalance 0
+\layout LyX-Code
+
+ }
+\layout LyX-Code
+
+
+\layout LyX-Code
+
+ map2
+\layout LyX-Code
+
+ {
+\layout LyX-Code
+
+ set g_teamForceBalance 1
+\layout LyX-Code
+
+ }
+\layout LyX-Code
+
+\layout LyX-Code
+
+ map3
+\layout LyX-Code
+
+}
+\layout Standard
+
+Primitive logic is also available:
+\layout LyX-Code
+
+mapRotation4
+\layout LyX-Code
+
+{
+\layout LyX-Code
+
+ map1
+\layout LyX-Code
+
+ goto map3
+\layout LyX-Code
+
+\layout LyX-Code
+
+ map2
+\layout LyX-Code
+
+ if numClients > 8
+\layout LyX-Code
+
+ mapRotation3
+\layout LyX-Code
+
+\layout LyX-Code
+
+ map3
+\layout LyX-Code
+
+ if lastWin aliens
+\layout LyX-Code
+
+ mapRotation2
+\layout LyX-Code
+
+
+\layout LyX-Code
+
+ if random
+\layout LyX-Code
+
+ mapRotation1
+\layout LyX-Code
+
+}
+\layout LyX-Code
+
+\layout LyX-Code
+
+mapRotation5
+\layout LyX-Code
+
+{
+\layout LyX-Code
+
+ map1
+\layout LyX-Code
+
+ if lastWin humans
+\layout LyX-Code
+
+ map4
+\layout LyX-Code
+
+ map2
+\layout LyX-Code
+
+ map3
+\layout LyX-Code
+
+ goto map1
+\layout LyX-Code
+
+ map4
+\layout LyX-Code
+
+ map5
+\layout LyX-Code
+
+}
+\layout Standard
+
+The
+\series bold
+goto
+\series default
+ keyword is used to unconditionally branch to either another map
+\emph on
+in the current rotation
+\emph default
+ or another map rotation entirely.
+ The
+\series bold
+if
+\series default
+keyword is used in conjunction with a condition to decide whether or not
+ to branch to the specified map or rotation (as with the
+\series bold
+goto
+\series default
+ keyword).
+ The condition itself can be one of
+\series bold
+numClients <op> <number>
+\series default
+,
+\series bold
+lastWin <team>
+\series default
+or
+\series bold
+random
+\series default
+, where
+\series bold
+<op>
+\series default
+ is
+\series bold
+<
+\series default
+,
+\series bold
+>
+\series default
+ or
+\series bold
+=
+\series default
+ and
+\series bold
+<team>
+\series default
+ is
+\series bold
+aliens
+\series default
+ or
+\series bold
+humans
+\series default
+.
+ The
+\series bold
+random
+\series default
+ condition simply chooses whether or not to execute the change randomly,
+ with each outcome equally likely.
+\layout Section
+
+Credits
+\layout Standard
+
+Tim
+\emph on
+'Timbo'
+\emph default
+ Angus -- Programming and Direction
+\layout Standard
+
+Nick
+\emph on
+'jex'
+\emph default
+ Jansens -- Mapping, texturing and 2D artwork
+\layout Standard
+
+Robin
+\emph on
+'OverFlow'
+\emph default
+ Marshall -- Modelling, animation and mapping
+\layout Standard
+
+Jan
+\emph on
+'Stannum'
+\emph default
+ van der Weg -- Texturing and mapping
+\layout Standard
+
+Mike
+\emph on
+'Veda'
+\emph default
+ Mcinnerney -- Modelling, animation and texturing
+\layout Standard
+
+Gordon
+\emph on
+'Godmil'
+\emph default
+ Miller -- Mapping
+\layout Standard
+
+'Who-[Soup]' -- Mapping
+\layout Standard
+
+Tristan
+\emph on
+'jhrx'
+\emph default
+ Blease -- Mapping
+\layout Standard
+
+Paul
+\emph on
+'MoP'
+\emph default
+ Greveson -- Modelling and texturing
+\layout Standard
+
+Chris
+\emph on
+'Dolby'
+\emph default
+ McCarthy -- Sound
+\layout Subsection*
+
+Special thanks
+\layout Standard
+
+Asa
+\emph on
+'Norfenstein'
+\emph default
+ Kravets -- Manual content, QA, design and balance suggestions
+\layout Standard
+
+'Crylar' -- Concept art
+\layout Standard
+
+Richard
+\emph on
+'R1CH'
+\emph default
+ Stanway -- Test server hosting
+\layout Standard
+
+Stéphane
+\emph on
+'MEGASTeP'
+\emph default
+ Peter -- Early test server hosting
+\layout Standard
+
+Sourceforge and TARDIS -- Web hosting
+\layout Standard
+
+Arsonide, Bajoran, Bt, Chamooze, Crylar, Cybernetsam, dzjepp, ectox, Edo,
+ evil poop, Excalibur, FroggyQuim, Idle Wild, juice, Kai, kingping, Lava
+ Croft, MajorPain, MiDiaN, Molog, Mutemode, Norfenstein, Orc, R1CH, Ratti,
+ Ravyn, Salteh, Sandy, SharkDog, slux, Suddien, Supa, Survivor, Swie, sysrq,
+ TerrorEast, Tyler, Vitae, Woo -- Beta testers
+\layout Subsection*
+
+Also thanks
+\layout Standard
+
+babyomen, Carc, djbob, Grim, Grytviken, Gumby, heimdall, Hellbringer, Hentai,
+ Mighty_Pea, Psylo, Reaper-1, RR2D02, Saig, Smack, T-bone, The GtkRadiant
+ people, The inhabitants of Quake3World, ThePyro, TTimo, ValouR, ydnar,
+ Yves 'evillair' Allaire
+\layout Standard
+\align center
+
+\noun on
+Tremulous is copyright darklegion development 2005
+\the_end
diff --git a/tremulous_ui/connect.menu b/tremulous_ui/connect.menu
new file mode 100644
index 00000000..835326e9
--- /dev/null
+++ b/tremulous_ui/connect.menu
@@ -0,0 +1,13 @@
+#include "ui/menudef.h"
+
+{
+ menuDef
+ {
+ name "Connect"
+ background "gfx/2d/load_screen"
+ rect 0 0 640 480
+ fullScreen MENU_FALSE
+ visible MENU_FALSE
+ style WINDOW_STYLE_SHADER
+ }
+}
diff --git a/tremulous_ui/createfavorite.menu b/tremulous_ui/createfavorite.menu
new file mode 100644
index 00000000..859e358d
--- /dev/null
+++ b/tremulous_ui/createfavorite.menu
@@ -0,0 +1,129 @@
+#include "ui/menudef.h"
+
+{
+\\ CREATE FAVORITE POPUP MENU \\
+
+ menuDef
+ {
+ name "createfavorite_popmenu"
+ visible 0
+ fullscreen 0
+ rect 204 122 235 235
+ focusColor 1 .75 0 1
+ style 1
+ border 1
+ popup
+ onESC
+ {
+ close createfavorite_popmenu;
+ open joinserver
+ }
+
+ itemDef
+ {
+ name window
+ rect 47 47 144 144
+ style WINDOW_STYLE_FILLED
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+
+ border WINDOW_BORDER_FULL
+ borderSize 1.0
+ borderColor 0.5 0.5 0.5 1
+ }
+
+ // ENTER NAME AND ADDRESS //
+
+ itemDef
+ {
+ name name
+ text "Name"
+ style 0
+ decoration
+ textscale .3
+ rect 0 61 110 20
+ textalign 1
+ textalignx 117
+ textaligny 16
+ forecolor 1 1 1 1
+ visible 1
+ }
+
+ itemDef
+ {
+ name nameEntry
+ style 1
+ maxchars 15
+ text ""
+ textscale .25
+ TYPE 4
+ cvar "ui_favoriteName"
+ rect 60 81 120 20
+ textalign 0
+ textalignx 10
+ textaligny 16
+ forecolor 1 1 1 1
+ backcolor .2 .2 .2 .5
+ visible 1
+ }
+
+ itemDef
+ {
+ name address
+ text "IP Address"
+ style 0
+ decoration
+ textscale .3
+ rect 0 111 110 20
+ textalign 1
+ textalignx 117
+ textaligny 16
+ forecolor 1 1 1 1
+ visible 1
+ }
+
+ itemDef
+ {
+ name addressEntry
+ style 1
+ maxchars 20
+ maxPaintChars 12
+ text ""
+ textscale .25
+ TYPE 4
+ maxchars 21
+ cvar "ui_favoriteAddress"
+ rect 60 131 120 20
+ textalign 0
+ textalignx 10
+ textaligny 16
+ forecolor 1 1 1 1
+ backcolor .2 .2 .2 .5
+ visible 1
+ }
+
+ itemDef
+ {
+ name yes
+ text "Ok"
+ type 1
+ textscale .25
+ style WINDOW_STYLE_EMPTY
+ rect 103 158 30 26
+ textalign 1
+ textalignx 15
+ textaligny 20
+ forecolor 1 1 1 1
+ backcolor .37 .1 .1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript CreateFavorite;
+ close createfavorite_popmenu;
+ open joinserver
+ }
+ }
+ }
+}
diff --git a/tremulous_ui/createserver.menu b/tremulous_ui/createserver.menu
new file mode 100644
index 00000000..170cd294
--- /dev/null
+++ b/tremulous_ui/createserver.menu
@@ -0,0 +1,547 @@
+#include "ui/menudef.h"
+
+{
+ \\ Server Creation \\
+
+ menuDef
+ {
+ name "createserver"
+ visible 0
+ fullscreen 1
+ rect 0 0 640 480
+ focusColor 1 .75 0 1
+ outOfBoundsClick
+ style 0
+
+ onOpen
+ {
+ uiScript loadArenas;
+ hide accept_alt;
+ show accept;
+ hide back_alt;
+ show back;
+ hide grpmessage
+ }
+
+ onEsc
+ {
+ close createserver;
+ open joinserver
+ }
+
+ itemDef
+ {
+ name background
+ rect 0 0 640 480
+ style WINDOW_STYLE_FILLED
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name window
+ rect 2 2 330 418
+ style WINDOW_STYLE_FILLED
+ border 1
+ bordercolor 1 1 1 .25
+ forecolor 1 1 1 1
+ backcolor 0 0 0 .25
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name window
+ rect 334 2 302 418
+ style WINDOW_STYLE_FILLED
+ border 1
+ bordercolor 1 1 1 .25
+ forecolor 1 1 1 1
+ backcolor 0 0 0 .25
+ visible 1
+ decoration
+ }
+
+ // map selection
+
+ itemDef
+ {
+ name mappreview
+ style 0
+ ownerdraw UI_STARTMAPCINEMATIC
+ rect 7 7 320 240
+ border 1
+ bordercolor .5 .5 .5 .5
+ visible 1
+ }
+
+ itemDef
+ {
+ name mappreview
+ style WINDOW_STYLE_FILLED
+ rect 6 6 322 242
+ border 1
+ bordercolor .5 .5 .5 .5
+ visible 1
+ }
+
+ itemDef
+ {
+ name maplist
+ rect 6 252 322 164
+ type ITEM_TYPE_LISTBOX
+ style WINDOW_STYLE_EMPTY
+ elementwidth 120
+ elementheight 20
+ textscale .33
+ elementtype LISTBOX_TEXT
+ feeder FEEDER_ALLMAPS
+ textalign 3
+ textaligny 14
+ border 1
+ bordercolor 0.5 0.5 0.5 1
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ outlinecolor 0.1 0.1 0.1 0.5
+ visible 1
+ columns 1
+ 2 190 25 ITEM_ALIGN_LEFT
+ }
+
+
+ // SETTINGS //
+
+ // NORMAL //
+
+ itemDef
+ {
+ name expert
+ group grpsettings
+ type ITEM_TYPE_EDITFIELD
+ text "Host Name:"
+ cvar "sv_hostname"
+ maxChars 32
+ maxPaintChars 20
+ rect 420 20 128 20
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 65
+ textaligny 12
+ textscale .36
+ forecolor 1 1 1 1
+ visible 1
+ }
+
+ itemDef
+ {
+ name normal
+ group grpsettings
+ type ITEM_TYPE_NUMERICFIELD
+ text "Time Limit:"
+ cvar "timelimit"
+ rect 420 40 128 20
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 65
+ maxchars 4
+ textaligny 12
+ textscale .36
+ forecolor 1 1 1 1
+ visible 1
+ }
+
+ itemDef
+ {
+ name expert
+ group grpsettings
+ type ITEM_TYPE_NUMERICFIELD
+ text "Maximum Players:"
+ cvar "sv_maxclients"
+ rect 420 60 128 20
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 65
+ maxchars 4
+ textaligny 12
+ textscale .36
+ forecolor 1 1 1 1
+ visible 1
+ }
+
+ itemDef
+ {
+ name expert
+ group grpsettings
+ type ITEM_TYPE_YESNO
+ text "Require Password:"
+ cvar "g_needpassword"
+ rect 420 80 128 20
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 65
+ textaligny 12
+ textscale .36
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav"
+ }
+ }
+
+ itemDef
+ {
+ name expert
+ group grpsettings
+ type 4
+ text "Password:"
+ cvar "g_password"
+ rect 420 100 128 20
+ maxchars 10
+ maxPaintChars 10
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 65
+ textaligny 12
+ textscale .36
+ forecolor 1 1 1 1
+ visible 1
+ }
+
+
+
+
+
+
+
+ itemDef
+ {
+ name normal
+ group grpsettings
+ type ITEM_TYPE_MULTI
+ text "Punkbuster:"
+ cvar "sv_punkbuster"
+ cvarFloatList { "No" 0 "Yes" 1 }
+ rect 420 150 128 20
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 65
+ textaligny 12
+ textscale .36
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav"
+ }
+ }
+
+ itemDef
+ {
+ name normal
+ group grpsettings
+ type ITEM_TYPE_YESNO
+ text "Pure Server:"
+ cvar "sv_pure"
+ rect 420 170 128 20
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 65
+ textaligny 12
+ textscale .36
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav"
+ }
+ }
+
+ itemDef
+ {
+ name normal
+ group grpsettings
+ type ITEM_TYPE_MULTI
+ text "Dedicated:"
+ // dedicated is a special cvar in that as soon as it is set,
+ // the game goes to console only so the ui catches this one specifically
+ cvar "ui_dedicated"
+ cvarFloatList { "No" 0 "LAN" 1 "Internet" 2 }
+ rect 420 190 128 20
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 65
+ textaligny 12
+ textscale .36
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav"
+ }
+ }
+
+ itemDef
+ {
+ name expert
+ group grpsettings
+ type ITEM_TYPE_YESNO
+ text "Auto Download:"
+ cvar "sv_allowdownload"
+ rect 420 210 128 20
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 65
+ textaligny 12
+ textscale .36
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav"
+ }
+ }
+
+ itemDef
+ {
+ name expert
+ group grpsettings
+ type ITEM_TYPE_YESNO
+ text "Enable Voting:"
+ cvar "g_allowvote"
+ rect 420 230 128 20
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 65
+ textaligny 12
+ textscale .36
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav"
+ }
+ }
+
+
+
+
+
+
+
+ itemDef
+ {
+ name expert
+ group grpsettings
+ type ITEM_TYPE_NUMERICFIELD
+ text "Minimum Ping:"
+ cvar "sv_minping"
+ rect 420 280 128 20
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 65
+ maxchars 4
+ textaligny 12
+ textscale .36
+ forecolor 1 1 1 1
+ visible 1
+ }
+
+ itemDef
+ {
+ name expert
+ group grpsettings
+ type ITEM_TYPE_NUMERICFIELD
+ text "Maximum Ping:"
+ cvar "sv_maxping"
+ rect 420 300 128 20
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 65
+ textaligny 12
+ maxchars 4
+ textscale .36
+ forecolor 1 1 1 1
+ visible 1
+ }
+
+ itemDef
+ {
+ name expert
+ group grpsettings
+ type ITEM_TYPE_YESNO
+ text "Synchronous Client:"
+ cvar "g_synchronousclients"
+ rect 420 320 128 20
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 65
+ textaligny 12
+ textscale .36
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav"
+ }
+ }
+
+ itemDef
+ {
+ name expert
+ group grpsettings
+ type ITEM_TYPE_NUMERICFIELD
+ text "Max Rate:"
+ cvar "sv_maxrate"
+ rect 420 340 128 20
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 65
+ maxchars 4
+ textaligny 12
+ textscale .36
+ forecolor 1 1 1 1
+ visible 1
+ }
+
+ itemDef
+ {
+ name expert
+ group grpsettings
+ type ITEM_TYPE_NUMERICFIELD
+ text "Zombie Time:"
+ cvar "sv_zombietime"
+ rect 420 360 128 20
+ maxchars 4
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 65
+ textaligny 12
+ textscale .36
+ forecolor 1 1 1 1
+ visible 1
+ }
+
+ itemDef
+ {
+ name expert
+ group grpsettings
+ type ITEM_TYPE_NUMERICFIELD
+ text "Reconnect Limit:"
+ cvar "sv_reconnectlimit"
+ maxchars 4
+ rect 420 380 128 20
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 65
+ textaligny 12
+ textscale .36
+ forecolor 1 1 1 1
+ visible 1
+ }
+
+
+
+
+
+
+ // BACK BAR //
+
+ itemDef
+ {
+ name back
+ style 3
+ background "ui/assets/backarrow.tga"
+ rect 16 424 50 50
+ visible 1
+ action
+ {
+ play "sound/misc/menu4.wav";
+ close createserver;
+ open joinserver
+ }
+
+ mouseEnter
+ {
+ hide back;
+ show back_alt
+ }
+ }
+
+ itemDef
+ {
+ name back_alt
+ style WINDOW_STYLE_SHADER
+ background "ui/assets/backarrow_alt.tga"
+ rect 16 424 50 50
+ backcolor 0 0 0 0
+ forecolor 1 1 1 1
+ visible 0
+ type ITEM_TYPE_BUTTON
+
+ text "Back"
+ textalign ITEM_ALIGN_LEFT
+ textaligny 36
+ textalignx 60
+ textscale .6
+
+ mouseExit
+ {
+ hide back_alt;
+ show back
+ }
+
+ action
+ {
+ play "sound/misc/menu4.wav";
+ close createserver;
+ open joinserver
+ }
+ }
+
+
+
+
+ itemDef
+ {
+ name accept
+ style 3
+ rect 574 424 50 50
+ background "ui/assets/forwardarrow.tga"
+ backcolor 0 0 0 0
+ forecolor 1 1 1 1
+ visible 1
+ mouseEnter
+ {
+ hide accept;
+ show accept_alt
+ }
+
+ action
+ {
+ play "sound/misc/menu1.wav";
+ close fight; //TA: no i don't know
+ uiScript StartServer
+ }
+ }
+
+ itemDef
+ {
+ name accept_alt
+ style WINDOW_STYLE_SHADER
+ rect 574 424 50 50
+ background "ui/assets/forwardarrow_alt.tga"
+ backcolor 0 0 0 0
+ type ITEM_TYPE_BUTTON
+ forecolor 1 1 1 1
+ visible 0
+ type ITEM_TYPE_BUTTON
+
+ text "Create"
+ textalign ITEM_ALIGN_LEFT
+ textaligny 36
+ textalignx -70
+ textscale .6
+
+ mouseExit
+ {
+ hide accept_alt;
+ show accept
+ }
+
+ action
+ {
+ play "sound/misc/menu1.wav";
+ close fight; //TA: no i don't know
+ uiScript StartServer
+ }
+ }
+ }
+}
diff --git a/tremulous_ui/error.menu b/tremulous_ui/error.menu
new file mode 100644
index 00000000..3674a91e
--- /dev/null
+++ b/tremulous_ui/error.menu
@@ -0,0 +1,103 @@
+#include "ui/menudef.h"
+
+{
+ \\ ERROR \\
+
+ menuDef
+ {
+ name "error_popmenu"
+ visible 0
+ fullscreen 0
+ rect 158 80 320 320
+ focusColor 1 .75 0 1
+ style 1
+ border 1
+ popup
+ onClose { uiScript clearError }
+ onOpen { }
+ onESC
+ {
+ play "sound/misc/menu1.wav";
+ close error_popmenu;
+ open main
+ }
+
+
+ itemDef
+ {
+ name window
+ rect 10 15 300 320
+ style WINDOW_STYLE_FILLED
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+
+ border WINDOW_BORDER_FULL
+ borderSize 1.0
+ borderColor 0.5 0.5 0.5 1
+ }
+
+ itemDef
+ {
+ name errorinfo
+ rect 0 50 320 20
+ text "Error:"
+ textalign 1
+ textstyle 6
+ textscale .333
+ textalignx 160
+ textaligny 23
+ forecolor 1 1 1 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name errorinfo
+ rect 60 80 200 270
+ type ITEM_TYPE_TEXT
+ style 1
+ textstyle 3
+ autowrapped
+ cvar "com_errorMessage"
+ textalign ITEM_ALIGN_CENTER
+ textalignx 100
+ textaligny 23
+ textscale .25
+ forecolor 1 1 1 1
+ visible 1
+ decoration
+ }
+
+
+ // BUTTON //
+
+
+ itemDef
+ {
+ name exit
+ text "Exit"
+ type 1
+ textscale .25
+ group grpControlbutton
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ rect 138 295 45 26
+ textalign 1
+ textalignx 22
+ textaligny 20
+ forecolor 1 1 1 1
+ backcolor .37 .1 .1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ close error_popmenu;
+ open main
+ }
+ }
+ }
+}
+
+
diff --git a/tremulous_ui/findplayer.menu b/tremulous_ui/findplayer.menu
new file mode 100644
index 00000000..df25f02c
--- /dev/null
+++ b/tremulous_ui/findplayer.menu
@@ -0,0 +1,245 @@
+#include "ui/menudef.h"
+
+{
+ \\ FIND PLAYER POPUP MENU \\
+
+ menuDef
+ {
+ name "findplayer_popmenu"
+ visible 0
+ fullscreen 0
+ rect 158 80 320 340
+ focusColor 1 .75 0 1
+ style 1
+ border 1
+ popup
+ onClose { }
+ onOpen
+ {
+ uiScript FindPlayer;
+ setfocus namefield
+ }
+
+ onESC
+ {
+ close findplayer_popmenu;
+ open joinserver
+ }
+
+ itemDef
+ {
+ name window
+ rect 10 15 320 340
+ style 1
+ backcolor 0 0 0 .25
+ forecolor 0 0 0 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name window
+ rect 10 15 300 320
+ style WINDOW_STYLE_FILLED
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+
+ border WINDOW_BORDER_FULL
+ borderSize 1.0
+ borderColor 0.5 0.5 0.5 1
+ }
+
+ itemDef
+ {
+ name findplayer
+ rect 0 20 320 20
+ text "Find a Friend"
+ textalign 1
+ textstyle 3
+ textscale .333
+ textalignx 155
+ textaligny 23
+ forecolor 1 1 1 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name window
+ rect 55 53 245 20
+ style WINDOW_STYLE_FILLED
+ backcolor .2 .2 .2 .5
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name namefield
+ group "playersettinggroup"
+ type ITEM_TYPE_EDITFIELD
+ style 0
+ text "Name:"
+ cvar "ui_findplayer"
+ maxChars 20
+ rect 20 48 215 32
+ textalign ITEM_ALIGN_LEFT
+ textalignx 5
+ textaligny 21
+ textscale .3
+ outlinecolor .2 .2 .2 .5
+ backcolor 0 0 0 0
+ forecolor 1 1 1 1
+ border 0
+ bordercolor 0 0 0 0
+ action { ui_script FindPlayer }
+ visible 1
+ }
+
+
+ itemDef
+ {
+ name serverNameList //LIST OF SERVER NAMES//
+ rect 20 75 280 80
+ type ITEM_TYPE_LISTBOX
+ style WINDOW_STYLE_FILLED
+ elementwidth 120
+ elementheight 16
+ textscale .225
+ backcolor 0 0 0 1
+ outlinecolor .2 .2 .2 .5
+ border 1
+ bordersize 1
+ bordercolor .5 .5 .5 1
+ elementtype LISTBOX_TEXT
+ feeder FEEDER_FINDPLAYER
+ visible 1
+ }
+
+ itemDef
+ {
+ name serverNamewindow
+ rect 20 75 264 80
+ style 1
+ backcolor 0 0 0 0
+ forecolor 0 0 0 0
+ border 1
+ bordersize 1
+ bordercolor .5 .5 .5 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name serverInfoList //LIST OF SERVER STATUS INFORMATION//
+ rect 20 175 280 110
+ type ITEM_TYPE_LISTBOX
+ style WINDOW_STYLE_FILLED
+ elementwidth 120
+ elementheight 16
+ textscale .225
+ backcolor 0 0 0 1
+ border 1
+ bordersize 1
+ bordercolor .5 .5 .5 1
+ elementtype LISTBOX_TEXT
+ feeder FEEDER_SERVERSTATUS
+ notselectable
+ visible 1
+ columns 4
+ 2 40 20 ITEM_ALIGN_LEFT
+ 40 40 10 ITEM_ALIGN_LEFT
+ 90 40 10 ITEM_ALIGN_LEFT
+ 135 40 20 ITEM_ALIGN_LEFT
+ }
+
+ itemDef
+ {
+ name serverInfowindow
+ rect 20 175 264 110
+ style 1
+ backcolor 0 0 0 0
+ forecolor 0 0 0 0
+ border 1
+ bordersize 1
+ bordercolor .5 .5 .5 1
+ visible 1
+ decoration
+ }
+
+
+ // BUTTON //
+
+ itemDef
+ {
+ name exit
+ text "Exit"
+ type 1
+ textscale .25
+ group grpControlbutton
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ rect 38 295 45 26
+ textalign 1
+ textalignx 22
+ textaligny 20
+ forecolor 1 1 1 1
+ backcolor .37 .1 .1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ close findplayer_popmenu;
+ open joinserver
+ }
+ }
+
+ itemDef
+ {
+ name search
+ text "Search"
+ type 1
+ textscale .25
+ group grpControlbutton
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ rect 131 295 60 26
+ textalign 1
+ textalignx 30
+ textaligny 20
+ forecolor 1 1 1 1
+ backcolor .37 .1 .1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ ui_script FindPlayer
+ }
+ }
+
+ itemDef
+ {
+ name join
+ text "Join"
+ type 1
+ textscale .25
+ group grpControlbutton
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ rect 238 295 45 26
+ textalign 1
+ textalignx 22
+ textaligny 20
+ forecolor 1 1 1 1
+ backcolor .37 .1 .1 1
+ visible 1
+ action { ui_script FoundPlayerJoinServer }
+ }
+ }
+}
+
+
diff --git a/tremulous_ui/hud.txt b/tremulous_ui/hud.txt
new file mode 100644
index 00000000..c99bead1
--- /dev/null
+++ b/tremulous_ui/hud.txt
@@ -0,0 +1,11 @@
+// hud menu defs
+//
+{
+ loadMenu { "ui/tremulous_human_hud.menu" }
+ loadMenu { "ui/tremulous_alien_builder_hud.menu" }
+ loadMenu { "ui/tremulous_alien_general_hud.menu" }
+ loadMenu { "ui/tremulous_default_hud.menu" }
+
+ loadMenu { "ui/teamscore.menu" }
+ loadMenu { "ui/loading.menu" }
+}
diff --git a/tremulous_ui/infopanes.def b/tremulous_ui/infopanes.def
new file mode 100644
index 00000000..fb99e245
--- /dev/null
+++ b/tremulous_ui/infopanes.def
@@ -0,0 +1,350 @@
+{
+ name alienteam
+ text "The Alien Team\n\n"
+ text "The Aliens' strengths are in movement "
+ text "and the ability to quickly construct new bases quickly. They possess a "
+ text "range of abilities including basic melee attacks, movement-"
+ text "crippling poisons and more."
+ align left
+}
+{
+ name humanteam
+ text "The Human Team\n\n"
+ text "The humans are the masters of technology. Although their bases take "
+ text "long to construct, their automated defense ensures they stay built. "
+ text "A wide range of upgrades and weapons are available to the humans, each "
+ text "contributing to eradicate the alien threat."
+ align left
+}
+{
+ name spectateteam
+ text "Watch the game without playing."
+}
+{
+ name autoteam
+ text "Join the team with the least players."
+}
+{
+ name rifleitem
+ text "Rifle\n\n"
+ text "Basic weapon. Cased projectile weapon, with a slow clip based "
+ text "reload system.\n\n"
+ text "Credits: Free"
+}
+{
+ name ckititem
+ text "Construction kit\n\n"
+ text "Used for building all basic structures. This includes "
+ text "spawns, power and basic defense.\n\n"
+ text "Credits: Free"
+}
+{
+ name ackititem
+ text "Advanced Construction kit\n\n"
+ text "Used for building advanced structures. This includes "
+ text "combat computers and advanced defense.\n\n"
+ text "Credits: Free"
+}
+{
+ name shotgunitem
+ text "Shotgun\n\n"
+ text "Close range weapon that is useful against larger foes. "
+ text "It has a slow repeat rate, but can be devastatingly "
+ text "effective.\n\n"
+ text "Credits: " text 150
+}
+{
+ name chaingunitem
+ text "Chain Gun\n\n"
+ text "Belt drive, cased projectile weapon. It has a high "
+ text "repeat rate but a wide firing angle and is therefore relatively "
+ text "inaccurate.\n\n"
+ text "Credits: " text 400
+}
+{
+ name flameritem
+ text "Flamethrower\n\n"
+ text "Sprays fire at its target. It is powered by compressed "
+ text "gas. The relatively low rate of fire means this weapon is most "
+ text "effective against static targets.\n\n"
+ text "Credits: " text 450
+}
+{
+ name mdriveritem
+ text "Mass Driver\n\n"
+ text "A portable particle accelerator which causes minor "
+ text "nuclear reactions at the point of impact. It has a very large "
+ text "payload, but fires slowly.\n\n"
+ text "Credits: " text 350
+}
+{
+ name prifleitem
+ text "Pulse Rifle\n\n"
+ text "An energy weapon that fires pulses of concentrated energy at a fast "
+ text "rate. It requires re-energising every 50 pulses.\n\n"
+ text "Credits: " text 400
+}
+{
+ name lcannonitem
+ text "Lucifer Cannon\n\n"
+ text "Similar to the pulse rifle, but more powerful. "
+ text "Additionally, it has a secondary attack where energy can be charged "
+ text "up to shoot a devastating ball of energy.\n\n"
+ text "Credits: " text 600
+}
+{
+ name lgunitem
+ text "Las Gun\n\n"
+ text "Slightly more powerful than the basic rifle, but "
+ text "instead of bullets it fires small packets of energy.\n\n"
+ text "Credits: " text 250
+}
+{
+ name psawitem
+ text "Pain Saw\n\n"
+ text "Similar to a chainsaw, but instead of a chain "
+ text "it has an electric arc capable of dealing a great deal of damage at "
+ text "close range.\n\n"
+ text "Credits: " text 100
+}
+{
+ name grenitem
+ text "Grenade\n\n"
+ text "A small incendinary device ideal for damaging tightly packed "
+ text "alien structures. Has a five second timer.\n\n"
+ text "Credits: " text 200
+}
+{
+ name larmouritem
+ text "Light Armour\n\n"
+ text "Protective armour that helps to defend against light alien melee "
+ text "attacks.\n\n"
+ text "Credits: " text 70
+}
+{
+ name helmetitem
+ text "Helmet\n\n"
+ text "In addition to protecting your head, the helmet provides a "
+ text "scanner indicating the presence of any non-human lifeforms in your "
+ text "immediate vicinity.\n\n"
+ text "Credits: " text 90
+}
+{
+ name battpackitem
+ text "Battery Pack\n\n"
+ text "Back-mounted battery pack that permits storage of one and a half "
+ text "times the normal energy capacity for energy weapons.\n\n"
+ text "Credits: " text 100
+}
+{
+ name jetpackitem
+ text "Jet Pack\n\n"
+ text "Back-mounted jet pack that enables the user to fly to remote "
+ text "locations. It is very useful against alien spawns in hard to reach "
+ text "spots.\n\n"
+ text "Credits: " text 120
+}
+{
+ name bsuititem
+ text "Battle Suit\n\n"
+ text "A full body armour that is highly effective at repelling alien attacks. "
+ text "It allows the user to enter hostile situations with a greater degree "
+ text "of confidence.\n\n"
+ text "Credits: " text 400
+}
+{
+ name ammoitem
+ text "Ammunition\n\n"
+ text "Ammunition for the currently held weapon.\n\n"
+ text "Credits: Free"
+}
+{
+ name telenodebuild
+ text "Telenode\n\n"
+ text "The most basic human structure. It provides a means for "
+ text "humans to enter the battle arena. Without any of these the humans "
+ text "cannot spawn and defeat is imminent.\n\n"
+ text "Power: " text 10
+}
+{
+ name mgturretbuild
+ text "Machine Gun Turret\n\n"
+ text "Automated base defense that is effective against fast moving targets, but "
+ text "does not cause much damage on its own and should "
+ text "always be backed up by physical support.\n\n"
+ text "Power: " text 8
+}
+{
+ name armbuild
+ text "Armoury\n\n"
+ text "An essential part of the human base, providing a means "
+ text "to upgrade the basic human. A range of upgrades and weapons are "
+ text "available from the armoury, each with a price.\n\n"
+ text "Power: " text 10
+}
+{
+ name medistatbuild
+ text "Medistation\n\n"
+ text "A structure providing an automated healing energy that restores "
+ text "the health of any human that stands inside it. It may only be used "
+ text "by one person at a time.\n\n"
+ text "Power: " text 8
+}
+{
+ name reactorbuild
+ text "Reactor\n\n"
+ text "All structures except the telenode rely on a reactor to operate."
+ text "The reactor provides power for all the human structures either "
+ text "directly or via repeaters. There can only be a single reactor.\n\n"
+}
+{
+ name dccbuild
+ text "Defense Computer\n\n"
+ text "A structure coordinating the action of base defense so that "
+ text "defense is distributed evenly among the enemy. "
+ text "This structure is required for building the Tesla Generator.\n\n"
+ text "Power: " text 8
+}
+{
+ name teslabuild
+ text "Tesla Generator\n\n"
+ text "A structure equipped with a strong electrical attack that always "
+ text "hits its target. It is useful against larger aliens "
+ text "and for consolidating basic defense.\n\n"
+ text "Power: " text 10
+}
+{
+ name repeaterbuild
+ text "Repeater\n\n"
+ text "A power distributor that transmits power from the reactor "
+ text "to remote locations, so that bases may be built far from the reactor.\n\n"
+}
+{
+ name eggpodbuild
+ text "Egg\n\n"
+ text "The most basic alien structure. It allows aliens to spawn "
+ text "and protect the Overmind. Without any of these, the Overmind is left "
+ text "nearly defenseless and defeat is imminent.\n\n"
+ text "Sentience: " text 10
+}
+{
+ name overmindbuild
+ text "Overmind\n\n"
+ text "A collective consciousness that controls all the "
+ text "alien structures in its vicinity. It must be protected at all costs, "
+ text "since its death will render alien structures defenseless."
+}
+{
+ name barricadebuild
+ text "Barricade\n\n"
+ text "Used to obstruct corridors and doorways, "
+ text "hindering humans from threatening the spawns and Overmind.\n\n"
+ text "Sentience: " text 10
+}
+{
+ name acid_tubebuild
+ text "Acid Tube\n\n"
+ text "Ejects lethal poisonous "
+ text "acid at an approaching human. These are highly effective when used in "
+ text "conjunction with a trapper to hold the victim in place.\n\n"
+ text "Sentience: " text 8
+}
+{
+ name hivebuild
+ text "Hive\n\n"
+ text "Houses millions of tiny "
+ text "insectoid aliens. When a human approaches this structure, the "
+ text "insectoids attack.\n\n"
+ text "Sentience: " text 12
+}
+{
+ name trapperbuild
+ text "Trapper\n\n"
+ text "Fires a blob of adhesive spit at any non-alien in its "
+ text "line of sight. This hinders their movement, making them an easy target "
+ text "for other defensive structures or aliens.\n\n"
+ text "Sentience: " text 10
+}
+{
+ name boosterbuild
+ text "Booster\n\n"
+ text "Provides any alien with a poison ability on all its "
+ text "attacks. In addition to the default attack damage, the victim loses "
+ text "health over time unless they heal themselves with anti-toxin."
+ text "The booster also increases the rate of health regeneration for "
+ text "any nearby aliens.\n\n"
+ text "Sentience: " text 12
+}
+{
+ name hovelbuild
+ text "Hovel\n\n"
+ text "An armoured shell used by the builder class to "
+ text "hide in, if the alien base is under attack. It may be entered or "
+ text "left at any time.\n\n"
+ text "Sentience: " text 8
+}
+{
+ name builderclass
+ text "Granger\n\n"
+ text "Responsible for building and maintaining all "
+ text "the alien structures."
+}
+{
+ name builderupgclass
+ text "Advanced Granger\n\n"
+ text "Similar to the base Granger, "
+ text "except that in addition to being able to build structures it has a "
+ text "melee attack and the ability to crawl on walls."
+}
+{
+ name level0class
+ text "Dretch\n\n"
+ text "Has a lethal bite and the ability to crawl "
+ text "on walls and ceilings."
+}
+{
+ name level1class
+ text "Basilisk\n\n"
+ text "Able to crawl on walls and ceilings. "
+ text "Its melee attack is most effective when combined with the ability to "
+ text "grab its foe."
+}
+{
+ name level1upgclass
+ text "Advanced Basilisk\n\n"
+ text "In addition to the basic Basilisk abilities, the Advanced "
+ text "Basilisk sprays a poisonous gas which disorientaits any "
+ text "nearby humans."
+}
+{
+ name level2class
+ text "Marauder\n\n"
+ text "Has a melee attack and the ability to jump off walls."
+ text "This allows the Marauder to gather great speed in enclosed areas."
+}
+{
+ name level2upgclass
+ text "Advanced Marauder\n\n"
+ text "The Advanced Marauder has all the abilities of the base Marauder "
+ text "including an area effect electric shock attack."
+}
+{
+ name level3class
+ text "Dragoon\n\n"
+ text "Possesses a melee attack and the pounce ability, which may "
+ text "be used as an attack, or a means to reach a remote location inaccessible "
+ text "from the ground."
+}
+{
+ name level3upgclass
+ text "Advanced Dragoon\n\n"
+ text "In addition to the basic Dragoon abilities, the Dragoon Upgrade has "
+ text "3 barbs which may be used to attack humans from a distance."
+}
+{
+ name level4class
+ text "Tyrant\n\n"
+ text "Provides a healing aura in which nearby aliens regenerate health "
+ text "faster than usual. As well as a melee attack, this class can charge "
+ text "at enemy humans and structures, inflicting great damage."
+}
diff --git a/tremulous_ui/infopanes.def.h b/tremulous_ui/infopanes.def.h
new file mode 100644
index 00000000..37a259b1
--- /dev/null
+++ b/tremulous_ui/infopanes.def.h
@@ -0,0 +1,418 @@
+#include "/home/tma/tremulous/src/game/tremulous.h"
+
+#define CREDITS(X) text "Credits: " text X
+#define HUMAN_BCOST(X) text "Power: " text X
+#define ALIEN_BCOST(X) text "Sentience: " text X
+
+//team menu
+
+{
+ name alienteam
+ text "The Alien Team\n\n"
+ text "The Aliens' strengths are in movement "
+ text "and the ability to quickly construct new bases quickly. They possess a "
+ text "range of abilities including basic melee attacks, movement-"
+ text "crippling poisons and more."
+ align left
+}
+
+{
+ name humanteam
+ text "The Human Team\n\n"
+ text "The humans are the masters of technology. Although their bases take "
+ text "long to construct, their automated defense ensures they stay built. "
+ text "A wide range of upgrades and weapons are available to the humans, each "
+ text "contributing to eradicate the alien threat."
+ align left
+}
+
+{
+ name spectateteam
+ text "Watch the game without playing."
+}
+
+{
+ name autoteam
+ text "Join the team with the least players."
+}
+
+
+//human items
+
+{
+ name rifleitem
+ text "Rifle\n\n"
+ text "Basic weapon. Cased projectile weapon, with a slow clip based "
+ text "reload system.\n\n"
+ text "Credits: Free"
+}
+
+{
+ name ckititem
+ text "Construction kit\n\n"
+ text "Used for building all basic structures. This includes "
+ text "spawns, power and basic defense.\n\n"
+ text "Credits: Free"
+}
+
+{
+ name ackititem
+ text "Advanced Construction kit\n\n"
+ text "Used for building advanced structures. This includes "
+ text "combat computers and advanced defense.\n\n"
+ text "Credits: Free"
+}
+
+{
+ name shotgunitem
+ text "Shotgun\n\n"
+ text "Close range weapon that is useful against larger foes. "
+ text "It has a slow repeat rate, but can be devastatingly "
+ text "effective.\n\n"
+ CREDITS( SHOTGUN_PRICE )
+}
+
+{
+ name chaingunitem
+ text "Chain Gun\n\n"
+ text "Belt drive, cased projectile weapon. It has a high "
+ text "repeat rate but a wide firing angle and is therefore relatively "
+ text "inaccurate.\n\n"
+ CREDITS( CHAINGUN_PRICE )
+}
+
+{
+ name flameritem
+ text "Flamethrower\n\n"
+ text "Sprays fire at its target. It is powered by compressed "
+ text "gas. The relatively low rate of fire means this weapon is most "
+ text "effective against static targets.\n\n"
+ CREDITS( FLAMER_PRICE )
+}
+
+{
+ name mdriveritem
+ text "Mass Driver\n\n"
+ text "A portable particle accelerator which causes minor "
+ text "nuclear reactions at the point of impact. It has a very large "
+ text "payload, but fires slowly.\n\n"
+ CREDITS( MDRIVER_PRICE )
+}
+
+{
+ name prifleitem
+ text "Pulse Rifle\n\n"
+ text "An energy weapon that fires pulses of concentrated energy at a fast "
+ text "rate. It requires re-energising every 50 pulses.\n\n"
+ CREDITS( PRIFLE_PRICE )
+}
+
+{
+ name lcannonitem
+ text "Lucifer Cannon\n\n"
+ text "Similar to the pulse rifle, but more powerful. "
+ text "Additionally, it has a secondary attack where energy can be charged "
+ text "up to shoot a devastating ball of energy.\n\n"
+ CREDITS( LCANNON_PRICE )
+}
+
+{
+ name lgunitem
+ text "Las Gun\n\n"
+ text "Slightly more powerful than the basic rifle, but "
+ text "instead of bullets it fires small packets of energy.\n\n"
+ CREDITS( LASGUN_PRICE )
+}
+
+{
+ name psawitem
+ text "Pain Saw\n\n"
+ text "Similar to a chainsaw, but instead of a chain "
+ text "it has an electric arc capable of dealing a great deal of damage at "
+ text "close range.\n\n"
+ CREDITS( PAINSAW_PRICE )
+}
+
+{
+ name grenitem
+ text "Grenade\n\n"
+ text "A small incendinary device ideal for damaging tightly packed "
+ text "alien structures. Has a five second timer.\n\n"
+ CREDITS( GRENADE_PRICE )
+}
+
+{
+ name larmouritem
+ text "Light Armour\n\n"
+ text "Protective armour that helps to defend against light alien melee "
+ text "attacks.\n\n"
+ CREDITS( LIGHTARMOUR_PRICE )
+}
+
+{
+ name helmetitem
+ text "Helmet\n\n"
+ text "In addition to protecting your head, the helmet provides a "
+ text "scanner indicating the presence of any non-human lifeforms in your "
+ text "immediate vicinity.\n\n"
+ CREDITS( HELMET_PRICE )
+}
+
+{
+ name battpackitem
+ text "Battery Pack\n\n"
+ text "Back-mounted battery pack that permits storage of one and a half "
+ text "times the normal energy capacity for energy weapons.\n\n"
+ CREDITS( BATTPACK_PRICE )
+}
+
+{
+ name jetpackitem
+ text "Jet Pack\n\n"
+ text "Back-mounted jet pack that enables the user to fly to remote "
+ text "locations. It is very useful against alien spawns in hard to reach "
+ text "spots.\n\n"
+ CREDITS( JETPACK_PRICE )
+}
+
+{
+ name bsuititem
+ text "Battle Suit\n\n"
+ text "A full body armour that is highly effective at repelling alien attacks. "
+ text "It allows the user to enter hostile situations with a greater degree "
+ text "of confidence.\n\n"
+ CREDITS( BSUIT_PRICE )
+}
+
+{
+ name ammoitem
+ text "Ammunition\n\n"
+ text "Ammunition for the currently held weapon.\n\n"
+ text "Credits: Free"
+}
+
+
+//human structures
+
+{
+ name telenodebuild
+ text "Telenode\n\n"
+ text "The most basic human structure. It provides a means for "
+ text "humans to enter the battle arena. Without any of these the humans "
+ text "cannot spawn and defeat is imminent.\n\n"
+ HUMAN_BCOST( HSPAWN_BP )
+}
+
+{
+ name mgturretbuild
+ text "Machine Gun Turret\n\n"
+ text "Automated base defense that is effective against fast moving targets, but "
+ text "does not cause much damage on its own and should "
+ text "always be backed up by physical support.\n\n"
+ HUMAN_BCOST( MGTURRET_BP )
+}
+
+{
+ name armbuild
+ text "Armoury\n\n"
+ text "An essential part of the human base, providing a means "
+ text "to upgrade the basic human. A range of upgrades and weapons are "
+ text "available from the armoury, each with a price.\n\n"
+ HUMAN_BCOST( ARMOURY_BP )
+}
+
+{
+ name medistatbuild
+ text "Medistation\n\n"
+ text "A structure providing an automated healing energy that restores "
+ text "the health of any human that stands inside it. It may only be used "
+ text "by one person at a time.\n\n"
+ HUMAN_BCOST( MEDISTAT_BP )
+}
+
+{
+ name reactorbuild
+ text "Reactor\n\n"
+ text "All structures except the telenode rely on a reactor to operate."
+ text "The reactor provides power for all the human structures either "
+ text "directly or via repeaters. There can only be a single reactor.\n\n"
+}
+
+{
+ name dccbuild
+ text "Defense Computer\n\n"
+ text "A structure coordinating the action of base defense so that "
+ text "defense is distributed evenly among the enemy. "
+ text "This structure is required for building the Tesla Generator.\n\n"
+ HUMAN_BCOST( DC_BP )
+}
+
+{
+ name teslabuild
+ text "Tesla Generator\n\n"
+ text "A structure equipped with a strong electrical attack that always "
+ text "hits its target. It is useful against larger aliens "
+ text "and for consolidating basic defense.\n\n"
+ HUMAN_BCOST( TESLAGEN_BP )
+}
+
+{
+ name repeaterbuild
+ text "Repeater\n\n"
+ text "A power distributor that transmits power from the reactor "
+ text "to remote locations, so that bases may be built far from the reactor.\n\n"
+}
+
+//alien structures
+
+{
+ name eggpodbuild
+ text "Egg\n\n"
+ text "The most basic alien structure. It allows aliens to spawn "
+ text "and protect the Overmind. Without any of these, the Overmind is left "
+ text "nearly defenseless and defeat is imminent.\n\n"
+ ALIEN_BCOST( ASPAWN_BP )
+}
+
+{
+ name overmindbuild
+ text "Overmind\n\n"
+ text "A collective consciousness that controls all the "
+ text "alien structures in its vicinity. It must be protected at all costs, "
+ text "since its death will render alien structures defenseless."
+}
+
+{
+ name barricadebuild
+ text "Barricade\n\n"
+ text "Used to obstruct corridors and doorways, "
+ text "hindering humans from threatening the spawns and Overmind.\n\n"
+ ALIEN_BCOST( BARRICADE_BP )
+}
+
+{
+ name acid_tubebuild
+ text "Acid Tube\n\n"
+ text "Ejects lethal poisonous "
+ text "acid at an approaching human. These are highly effective when used in "
+ text "conjunction with a trapper to hold the victim in place.\n\n"
+ ALIEN_BCOST( ACIDTUBE_BP )
+}
+
+{
+ name hivebuild
+ text "Hive\n\n"
+ text "Houses millions of tiny "
+ text "insectoid aliens. When a human approaches this structure, the "
+ text "insectoids attack.\n\n"
+ ALIEN_BCOST( HIVE_BP )
+}
+
+{
+ name trapperbuild
+ text "Trapper\n\n"
+ text "Fires a blob of adhesive spit at any non-alien in its "
+ text "line of sight. This hinders their movement, making them an easy target "
+ text "for other defensive structures or aliens.\n\n"
+ ALIEN_BCOST( TRAPPER_BP )
+}
+
+{
+ name boosterbuild
+ text "Booster\n\n"
+ text "Provides any alien with a poison ability on all its "
+ text "attacks. In addition to the default attack damage, the victim loses "
+ text "health over time unless they heal themselves with anti-toxin."
+ text "The booster also increases the rate of health regeneration for "
+ text "any nearby aliens.\n\n"
+ ALIEN_BCOST( BOOSTER_BP )
+}
+
+{
+ name hovelbuild
+ text "Hovel\n\n"
+ text "An armoured shell used by the builder class to "
+ text "hide in, if the alien base is under attack. It may be entered or "
+ text "left at any time.\n\n"
+ ALIEN_BCOST( HOVEL_BP )
+}
+
+//alien classes
+
+{
+ name builderclass
+ text "Granger\n\n"
+ text "Responsible for building and maintaining all "
+ text "the alien structures."
+}
+
+{
+ name builderupgclass
+ text "Advanced Granger\n\n"
+ text "Similar to the base Granger, "
+ text "except that in addition to being able to build structures it has a "
+ text "melee attack and the ability to crawl on walls."
+}
+
+{
+ name level0class
+ text "Dretch\n\n"
+ text "Has a lethal bite and the ability to crawl "
+ text "on walls and ceilings."
+}
+
+{
+ name level1class
+ text "Basilisk\n\n"
+ text "Able to crawl on walls and ceilings. "
+ text "Its melee attack is most effective when combined with the ability to "
+ text "grab its foe."
+}
+
+{
+ name level1upgclass
+ text "Advanced Basilisk\n\n"
+ text "In addition to the basic Basilisk abilities, the Advanced "
+ text "Basilisk sprays a poisonous gas which disorientaits any "
+ text "nearby humans."
+}
+
+{
+ name level2class
+ text "Marauder\n\n"
+ text "Has a melee attack and the ability to jump off walls."
+ text "This allows the Marauder to gather great speed in enclosed areas."
+}
+
+{
+ name level2upgclass
+ text "Advanced Marauder\n\n"
+ text "The Advanced Marauder has all the abilities of the base Marauder "
+ text "including an area effect electric shock attack."
+}
+
+{
+ name level3class
+ text "Dragoon\n\n"
+ text "Possesses a melee attack and the pounce ability, which may "
+ text "be used as an attack, or a means to reach a remote location inaccessible "
+ text "from the ground."
+}
+
+{
+ name level3upgclass
+ text "Advanced Dragoon\n\n"
+ text "In addition to the basic Dragoon abilities, the Dragoon Upgrade has "
+ text "3 barbs which may be used to attack humans from a distance."
+}
+
+{
+ name level4class
+ text "Tyrant\n\n"
+ text "Provides a healing aura in which nearby aliens regenerate health "
+ text "faster than usual. As well as a melee attack, this class can charge "
+ text "at enemy humans and structures, inflicting great damage."
+}
+
+// graphic <top|bottom|left|right> <center|some numerical offset> <shadername> <width> <height>
+// graphic left center "gfx/blah" 64 128
diff --git a/tremulous_ui/ingame.menu b/tremulous_ui/ingame.menu
new file mode 100644
index 00000000..ae4833fd
--- /dev/null
+++ b/tremulous_ui/ingame.menu
@@ -0,0 +1,135 @@
+#include "ui/menudef.h"
+{
+ assetGlobalDef
+ {
+ font "fonts/font" 26 // font
+ smallFont "fonts/smallfont" 20 // font
+ bigFont "fonts/bigfont" 34 // font
+ cursor "ui/assets/3_cursor3" // cursor
+ gradientBar "ui/assets/gradientbar2.tga" // gradient bar
+ itemFocusSound "sound/misc/menu2.wav" // sound for item getting focus (via keyboard or mouse )
+
+ fadeClamp 1.0 // sets the fadeup alpha
+ fadeCycle 1 // how often fade happens in milliseconds
+ fadeAmount 0.1 // amount to adjust alpha per cycle
+
+ shadowColor 0.1 0.1 0.1 0.25 // shadow color
+ }
+
+
+ \\ INGAME MENU \\
+
+ menuDef
+ {
+ name "ingame"
+ style WINDOW_STYLE_FILLED
+ visible 0
+ fullScreen 0
+ outOfBoundsClick // this closes the window if it gets a click out of the rectangle
+ rect 0 0 640 48
+ focusColor 1 .75 0 1
+ disableColor .5 .5 .5 1
+ backColor 0 0 0 1
+
+ onEsc
+ {
+ close ingame;
+ }
+
+ itemDef
+ {
+ name splashmodel
+ rect 0 -10 640 66
+ type ITEM_TYPE_MODEL
+ style WINDOW_STYLE_FILLED
+ asset_model "models/splash/splash_screen.md3"
+ model_fovx 32.0
+ model_fovy 3.8
+ model_angle 180
+ visible 1
+ decoration
+ backcolor 0 0 0 1
+ }
+
+ itemdef
+ {
+ name about
+ text "About"
+ rect 35 6 65 40
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ textalign ITEM_ALIGN_CENTER
+ textalignx 32
+ textaligny 28
+ textscale .4
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ open ingame_about
+ }
+ }
+
+ itemDef
+ {
+ name options
+ text "Options"
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ rect 100 6 70 40
+ textalign ITEM_ALIGN_CENTER
+ textalignx 35
+ textaligny 28
+ textscale .4
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ open ingame_options
+ }
+ }
+
+ itemDef
+ {
+ name vote
+ text "Vote"
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ ownerdrawflag UI_SHOW_NOTSPECTATING
+ rect 170 6 50 40
+ textalign ITEM_ALIGN_CENTER
+ textalignx 25
+ textaligny 28
+ textscale .4
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ open ingame_vote
+ }
+ }
+
+ itemDef
+ {
+ name leave
+ text "Exit"
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ rect 220 6 50 40
+ textalign ITEM_ALIGN_CENTER
+ textalignx 25
+ textaligny 28
+ textscale .4
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ open ingame_leave
+ }
+ }
+ }
+}
diff --git a/tremulous_ui/ingame.txt b/tremulous_ui/ingame.txt
new file mode 100644
index 00000000..fd2a77f9
--- /dev/null
+++ b/tremulous_ui/ingame.txt
@@ -0,0 +1,11 @@
+// menu defs
+//
+{
+ loadMenu { "ui/ingame.menu" }
+ loadMenu { "ui/ingame_about.menu" }
+ loadMenu { "ui/ingame_options.menu" }
+ loadMenu { "ui/ingame_vote.menu" }
+ loadMenu { "ui/ingame_callvote.menu" }
+ loadMenu { "ui/ingame_callteamvote.menu" }
+ loadMenu { "ui/ingame_leave.menu" }
+}
diff --git a/tremulous_ui/ingame_about.menu b/tremulous_ui/ingame_about.menu
new file mode 100644
index 00000000..b90cf480
--- /dev/null
+++ b/tremulous_ui/ingame_about.menu
@@ -0,0 +1,173 @@
+#include "ui/menudef.h"
+
+{
+ \\ INGAME ABOUT BOX \\
+
+ menuDef
+ {
+ name "ingame_about"
+ visible 0
+ fullscreen 0
+ outOfBoundsClick // this closes the window if it gets a click out of the rectangle
+ rect 10 56 256 160
+ focusColor 1 .75 0 1
+
+ itemDef
+ {
+ name window
+ rect 10 5 256 150
+ style 1
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+
+ border WINDOW_BORDER_KCGRADIENT
+ borderSize 2.0
+ borderColor 0.5 0.5 0.5 1
+ }
+
+ itemDef
+ {
+ name about
+ rect 0 25 256 20
+ name gametypefield
+ type 4
+ style 0
+ text "Map Name:"
+ cvar mapname
+ maxPaintChars 12
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 128
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name about
+ rect 0 40 256 20
+ type 4
+ style 0
+ text "Time Limit:"
+ maxPaintChars 12
+ cvar timelimit
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 128
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name about
+ rect 0 55 256 20
+ type 4
+ style 0
+ text "Protocol:"
+ cvar protocol
+ maxPaintChars 12
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 128
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name about
+ rect 0 70 256 20
+ type 4
+ style 0
+ text "Max Clients:"
+ cvar sv_maxclients
+ maxPaintChars 12
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 128
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name about
+ rect 0 85 256 20
+ type 4
+ style 0
+ text "Host Name:"
+ cvar sv_hostname
+ maxPaintChars 12
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 128
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name about
+ rect 0 100 256 20
+ type 11
+ style 0
+ text "Password Required:"
+ cvar g_needpass
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 128
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name about
+ rect 0 115 256 20
+ type 11
+ style 0
+ text "DM Flags:"
+ cvar g_dmflags
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 128
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name about
+ rect 0 130 256 20
+ type 4
+ style 0
+ text "Version:"
+ cvar version
+ maxPaintChars 32
+ textalign ITEM_ALIGN_LEFT
+ textalignx 128
+ textaligny 12
+ textalign 1
+ textscale .25
+ forecolor 1 1 1 1
+ visible 1
+ decoration
+ }
+ }
+}
diff --git a/tremulous_ui/ingame_callteamvote.menu b/tremulous_ui/ingame_callteamvote.menu
new file mode 100644
index 00000000..1b944e00
--- /dev/null
+++ b/tremulous_ui/ingame_callteamvote.menu
@@ -0,0 +1,175 @@
+#include "ui/menudef.h"
+
+{
+ menuDef
+ {
+ name "ingame_callteamvote"
+ visible 0
+ fullscreen 0
+ outOfBoundsClick // this closes the window if it gets a click out of the rectangle
+ rect 37 56 250 157
+ focusColor 1 .75 0 1
+ onopen
+ {
+ hide grpCallVote;
+ show teamKick;
+
+ setitemcolor teamKickBtn forecolor 0.2 0.2 0.2 1.0;
+ }
+
+ itemDef
+ {
+ name window
+ rect 10 5 230 147
+ style WINDOW_STYLE_FILLED
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+
+ border WINDOW_BORDER_KCGRADIENT
+ borderSize 2.0
+ borderColor 0.5 0.5 0.5 1
+ }
+
+ itemDef
+ {
+ name teamKickBtn
+ text "Team Kick"
+ textscale .25
+ group grpbutton
+ rect 20 40 45 20
+ type ITEM_TYPE_BUTTON
+ textalign ITEM_ALIGN_CENTER
+ textalignx 22
+ textaligny 16
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ hide grpCallVote;
+ show teamKick;
+
+ setitemcolor teamKickBtn forecolor 0.2 0.2 0.2 1.0;
+ }
+ }
+
+
+ // TEAM KICK PLAYER //
+
+ itemDef
+ {
+ name teamKick
+ group grpCallVote
+ text "Team Kick Player:"
+ textscale .25
+ rect 70 15 110 20
+ textalign 0
+ textalignx 0
+ textaligny 16
+ forecolor 1 1 1 1
+ visible 0
+ decoration
+ }
+
+ itemDef
+ {
+ name teamKick
+ group grpCallVote
+ rect 70 35 150 85
+ style WINDOW_STYLE_EMPTY
+ type ITEM_TYPE_LISTBOX
+ elementwidth 120
+ elementheight 15
+ textscale .25
+ elementtype LISTBOX_TEXT
+ feeder FEEDER_TEAM_LIST
+ border 1
+ bordercolor 0.5 0.5 0.5 0.5
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ outlinecolor 0.1 0.1 0.1 0.5
+ visible 0
+ }
+
+ itemDef
+ {
+ name teamKick
+ text "OK"
+ type ITEM_TYPE_BUTTON
+ textscale .25
+ group grpCallVote
+ rect 173 125 50 20
+ textalign 1
+ textalignx 25
+ textaligny 15
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript voteTeamKick;
+ uiScript closeingame
+ }
+ }
+
+
+ // KICK PLAYER //
+
+ itemDef
+ {
+ name kick
+ group grpCallVote
+ text "Kick Player:"
+ textscale .25
+ rect 70 15 110 20
+ textalign 0
+ textalignx 0
+ textaligny 16
+ forecolor 1 1 1 1
+ visible 0
+ decoration
+ }
+
+ itemDef
+ {
+ name kick
+ group grpCallVote
+ rect 70 35 150 85
+ style WINDOW_STYLE_EMPTY
+ type ITEM_TYPE_LISTBOX
+ elementwidth 120
+ elementheight 15
+ textscale .25
+ elementtype LISTBOX_TEXT
+ feeder FEEDER_PLAYER_LIST
+ border 1
+ bordercolor 0.5 0.5 0.5 0.5
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ outlinecolor 0.1 0.1 0.1 0.5
+ visible 0
+ }
+
+ itemDef
+ {
+ name kick
+ text "OK"
+ type ITEM_TYPE_BUTTON
+ textscale .25
+ group grpCallVote
+ rect 173 125 50 20
+ textalign 1
+ textalignx 25
+ textaligny 15
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript voteKick;
+ uiScript closeingame
+ }
+ }
+ }
+}
diff --git a/tremulous_ui/ingame_callvote.menu b/tremulous_ui/ingame_callvote.menu
new file mode 100644
index 00000000..f1cf2c7a
--- /dev/null
+++ b/tremulous_ui/ingame_callvote.menu
@@ -0,0 +1,276 @@
+#include "ui/menudef.h"
+
+{
+ menuDef
+ {
+ name "ingame_callvote"
+ visible 0
+ fullscreen 0
+ outOfBoundsClick // this closes the window if it gets a click out of the rectangle
+ rect 37 56 250 157
+ focusColor 1 .75 0 1
+ onopen
+ {
+ uiScript loadArenas;
+ hide grpCallVote;
+ show misc;
+
+ setitemcolor miscBtn forecolor 0.2 0.2 0.2 1.0;
+ setitemcolor kickBtn forecolor 1.0 1.0 1.0 1.0;
+ setitemcolor mapBtn forecolor 1.0 1.0 1.0 1.0;
+ }
+
+ itemDef
+ {
+ name window
+ rect 10 5 230 147
+ style WINDOW_STYLE_FILLED
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+
+ border WINDOW_BORDER_KCGRADIENT
+ borderSize 2.0
+ borderColor 0.5 0.5 0.5 1
+ }
+
+ itemDef
+ {
+ name miscBtn
+ text "Misc"
+ textscale .25
+ group grpbutton
+ rect 20 40 45 20
+ type ITEM_TYPE_BUTTON
+ textalign ITEM_ALIGN_CENTER
+ textalignx 22
+ textaligny 16
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ hide grpCallVote;
+ show misc;
+
+ setitemcolor miscBtn forecolor 0.2 0.2 0.2 1.0;
+ setitemcolor kickBtn forecolor 1.0 1.0 1.0 1.0;
+ setitemcolor mapBtn forecolor 1.0 1.0 1.0 1.0
+ }
+ }
+
+ itemDef
+ {
+ name kickBtn
+ text "Kick"
+ textscale .25
+ group grpbutton
+ rect 20 65 45 20
+ type ITEM_TYPE_BUTTON
+ textalign ITEM_ALIGN_CENTER
+ textalignx 22
+ textaligny 16
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ hide grpCallVote;
+ show kick;
+
+ setitemcolor miscBtn forecolor 1.0 1.0 1.0 1.0;
+ setitemcolor kickBtn forecolor 0.2 0.2 0.2 1.0;
+ setitemcolor mapBtn forecolor 1.0 1.0 1.0 1.0
+ }
+ }
+
+ itemDef
+ {
+ name mapBtn
+ text "Map"
+ textscale .25
+ group grpbutton
+ rect 20 90 45 20
+ type ITEM_TYPE_BUTTON
+ textalign ITEM_ALIGN_CENTER
+ textalignx 22
+ textaligny 16
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ hide grpCallVote;
+ show map;
+
+ setitemcolor miscBtn forecolor 1.0 1.0 1.0 1.0;
+ setitemcolor kickBtn forecolor 1.0 1.0 1.0 1.0;
+ setitemcolor mapBtn forecolor 0.2 0.2 0.2 1.0
+ }
+ }
+
+
+ // MISC //
+
+ itemDef
+ {
+ name misc
+ text "Restart Map"
+ group grpCallVote
+ textscale .25
+ rect 90 45 96 20
+ type 1
+ textalign 1
+ textalignx 50
+ textaligny 16
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ exec "cmd callvote map_restart";
+ uiScript closeingame
+ }
+ }
+
+ itemDef
+ {
+ name misc
+ group grpCallVote
+ text "Next Map"
+ textscale .25
+ rect 90 75 96 20
+ type 1
+ textalign 1
+ textalignx 50
+ textaligny 16
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ exec "cmd callvote nextmap";
+ uiScript closeingame
+ }
+ }
+
+
+ // KICK PLAYER //
+
+ itemDef
+ {
+ name kick
+ group grpCallVote
+ text "Kick Player:"
+ textscale .25
+ rect 70 15 110 20
+ textalign 0
+ textalignx 0
+ textaligny 16
+ forecolor 1 1 1 1
+ visible 0
+ decoration
+ }
+
+ itemDef
+ {
+ name kick
+ group grpCallVote
+ rect 70 35 150 85
+ style WINDOW_STYLE_EMPTY
+ type ITEM_TYPE_LISTBOX
+ elementwidth 120
+ elementheight 15
+ textscale .25
+ elementtype LISTBOX_TEXT
+ feeder FEEDER_PLAYER_LIST
+ border 1
+ bordercolor 0.5 0.5 0.5 0.5
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ outlinecolor 0.1 0.1 0.1 0.5
+ visible 0
+ }
+
+ itemDef
+ {
+ name kick
+ text "OK"
+ type ITEM_TYPE_BUTTON
+ textscale .25
+ group grpCallVote
+ rect 173 125 50 20
+ textalign 1
+ textalignx 25
+ textaligny 15
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript voteKick;
+ uiScript closeingame
+ }
+ }
+
+
+ // NEW MAP //
+
+ itemDef
+ {
+ name map
+ group grpCallVote
+ text "New Map:"
+ ownerdraw UI_ALLMAPS_SELECTION
+ textscale .25
+ rect 70 15 110 20
+ textalign 0
+ textalignx 0
+ textaligny 16
+ forecolor 1 1 1 1
+ decoration
+ visible 0
+ }
+
+ itemDef
+ {
+ name map
+ group grpCallVote
+ rect 70 35 150 85
+ type ITEM_TYPE_LISTBOX
+ style WINDOW_STYLE_EMPTY
+ elementwidth 120
+ elementheight 15
+ textscale .25
+ elementtype LISTBOX_TEXT
+ feeder FEEDER_ALLMAPS
+ border 1
+ bordercolor 0.5 0.5 0.5 0.5
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ outlinecolor 0.1 0.1 0.1 0.5
+ visible 0
+ }
+
+ itemDef
+ {
+ name map
+ text "OK"
+ type ITEM_TYPE_BUTTON
+ textscale .25
+ group grpCallVote
+ rect 173 125 50 20
+ textalign 1
+ textalignx 25
+ textaligny 15
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript voteMap;
+ uiScript closeingame
+ }
+ }
+ }
+}
diff --git a/tremulous_ui/ingame_leave.menu b/tremulous_ui/ingame_leave.menu
new file mode 100644
index 00000000..3e6071c3
--- /dev/null
+++ b/tremulous_ui/ingame_leave.menu
@@ -0,0 +1,331 @@
+#include "ui/menudef.h"
+
+{
+ \\ INGAME_LEAVE MENU \\
+
+ menuDef
+ {
+ name "ingame_leave"
+ visible 1
+ fullScreen 0
+ outOfBoundsClick // this closes the window if it gets a click out of the rectangle
+ rect 160 56 128 125
+ focusColor 1 .75 0 1
+ onOpen
+ {
+ show grpMenu;
+ hide grpConfirm
+ }
+
+ itemDef
+ {
+ name leave
+ style WINDOW_STYLE_FILLED
+ rect 5 5 107 90
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+
+ border WINDOW_BORDER_KCGRADIENT
+ borderSize 2.0
+ borderColor 0.5 0.5 0.5 1
+ }
+
+ itemDef
+ {
+ name leave
+ text "Main Menu"
+ group grpMenu
+ style WINDOW_STYLE_EMPTY
+ rect 0 20 128 20
+ type 1
+ textalign 1
+ textalignx 64
+ textaligny 18
+ textscale .25
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ hide grpMenu;
+ show leaveConfirm
+ }
+ }
+
+ itemDef
+ {
+ name leave
+ group grpMenu
+ text "Restart"
+ style WINDOW_STYLE_EMPTY
+ type 1
+ rect 0 40 128 20
+ textalign 1
+ textalignx 65
+ textaligny 18
+ textscale .25
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ hide grpMenu;
+ show restartConfirm
+ }
+ }
+
+ itemDef
+ {
+ name leave
+ group grpMenu
+ type 1
+ text "Quit"
+ style WINDOW_STYLE_EMPTY
+ rect 0 60 128 20
+ textalign 1
+ textalignx 64
+ textaligny 18
+ textscale .25
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ hide grpMenu;
+ show quitConfirm
+ }
+ }
+
+
+ // CONFIRMS //
+
+
+ itemDef
+ {
+ name leaveConfirm
+ text "Exit to"
+ group grpConfirm
+ style WINDOW_STYLE_EMPTY
+ rect 0 23 128 20
+ textalign 1
+ textalignx 64
+ textaligny 18
+ textscale .25
+ decoration
+ forecolor 1 1 1 1
+ visible 1
+ }
+
+ itemDef
+ {
+ name leaveConfirm
+ text "Main Menu?"
+ group grpConfirm
+ style WINDOW_STYLE_EMPTY
+ rect 0 40 128 20
+ textalign 1
+ textalignx 64
+ textaligny 18
+ textscale .25
+ decoration
+ forecolor 1 1 1 1
+ visible 1
+ }
+
+ itemDef
+ {
+ name leaveConfirm
+ text "Yes"
+ group grpConfirm
+ type 1
+ textscale .25
+ style WINDOW_STYLE_EMPTY
+ rect 18 70 40 20
+ textalign 1
+ textalignx 20
+ textaligny 15
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript leave
+ }
+ }
+
+ itemDef
+ {
+ name leaveConfirm
+ text "No"
+ group grpConfirm
+ type 1
+ textscale .25
+ style WINDOW_STYLE_EMPTY
+ rect 70 70 40 20
+ textalign 1
+ textalignx 20
+ textaligny 15
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu3.wav";
+ hide grpConfirm;
+ show grpMenu
+ }
+ }
+
+ itemDef
+ {
+ name restartConfirm
+ text "Want to"
+ group grpConfirm
+ style WINDOW_STYLE_EMPTY
+ rect 0 23 128 20
+ textalign 1
+ textalignx 64
+ textaligny 18
+ textscale .25
+ decoration
+ forecolor 1 1 1 1
+ visible 1
+ }
+
+ itemDef
+ {
+ name restartConfirm
+ text "Restart Map?"
+ group grpConfirm
+ style WINDOW_STYLE_EMPTY
+ rect 0 40 128 20
+ textalign 1
+ textalignx 64
+ textaligny 18
+ textscale .25
+ decoration
+ forecolor 1 1 1 1
+ visible 1
+ }
+
+ itemDef
+ {
+ name restartConfirm
+ text "Yes"
+ group grpConfirm
+ type 1
+ textscale .25
+ style WINDOW_STYLE_EMPTY
+ rect 18 70 40 20
+ textalign 1
+ textalignx 20
+ textaligny 15
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ exec "map_restart";
+ close ingame_leave;
+ close ingame
+ }
+ }
+
+ itemDef
+ {
+ name restartConfirm
+ text "No"
+ group grpConfirm
+ type 1
+ textscale .25
+ style WINDOW_STYLE_EMPTY
+ rect 70 70 40 20
+ textalign 1
+ textalignx 20
+ textaligny 15
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu3.wav";
+ hide grpConfirm;
+ show grpMenu
+ }
+ }
+
+ itemDef
+ {
+ name quitConfirm
+ text "Want to"
+ group grpConfirm
+ style WINDOW_STYLE_EMPTY
+ rect 0 23 128 20
+ textalign 1
+ textalignx 64
+ textaligny 18
+ textscale .25
+ forecolor 1 1 1 1
+ decoration
+ visible 1
+ }
+
+ itemDef
+ {
+ name quitConfirm
+ text "Quit Game?"
+ group grpConfirm
+ style WINDOW_STYLE_EMPTY
+ rect 0 40 128 20
+ textalign 1
+ textalignx 64
+ textaligny 18
+ textscale .25
+ forecolor 1 1 1 1
+ decoration
+ visible 1
+ }
+
+ itemDef
+ {
+ name quitConfirm
+ text "Yes"
+ group grpConfirm
+ type 1
+ textscale .25
+ style WINDOW_STYLE_EMPTY
+ rect 18 70 40 20
+ textalign 1
+ textalignx 20
+ textaligny 15
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript quit
+ }
+ }
+
+ itemDef
+ {
+ name quitConfirm
+ text "No"
+ group grpConfirm
+ type 1
+ textscale .25
+ style WINDOW_STYLE_EMPTY
+ rect 70 70 40 20
+ textalign 1
+ textalignx 20
+ textaligny 15
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu3.wav";
+ hide grpConfirm;
+ show grpMenu
+ }
+ }
+ }
+}
diff --git a/tremulous_ui/ingame_options.menu b/tremulous_ui/ingame_options.menu
new file mode 100644
index 00000000..210818c1
--- /dev/null
+++ b/tremulous_ui/ingame_options.menu
@@ -0,0 +1,1991 @@
+#include "ui/menudef.h"
+
+{
+ \\ INGAME OPTIONS BOX \\
+
+ menuDef
+ {
+ name "ingame_options"
+ visible 0
+ fullscreen 0
+ outOfBoundsClick // this closes the window if it gets a click out of the rectangle
+ rect 10 56 292 280
+ focusColor 1 .75 0 1
+ onopen
+ {
+ hide optionsGrp;
+ show game;
+
+ setitemcolor gameBtn forecolor 0.2 0.2 0.2 1.0;
+ setitemcolor controlsBtn forecolor 1.0 1.0 1.0 1.0;
+ setitemcolor systemBtn forecolor 1.0 1.0 1.0 1.0
+ }
+
+ itemDef
+ {
+ name window
+ rect 10 5 292 270
+ style WINDOW_STYLE_FILLED
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+
+ border WINDOW_BORDER_KCGRADIENT
+ borderSize 2.0
+ borderColor 0.5 0.5 0.5 1
+ }
+
+ //Section menus
+ itemDef
+ {
+ name GameBtn
+ text "Game"
+ group menuGrp
+ style WINDOW_STYLE_EMPTY
+ rect 90 20 64 20
+ type ITEM_TYPE_BUTTON
+ textalign ITEM_ALIGN_CENTER
+ textalignx 34
+ textaligny 18
+ textscale .35
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ hide optionsGrp;
+ show game;
+
+ setitemcolor gameBtn forecolor 0.2 0.2 0.2 1.0;
+ setitemcolor controlsBtn forecolor 1.0 1.0 1.0 1.0;
+ setitemcolor systemBtn forecolor 1.0 1.0 1.0 1.0
+ }
+ }
+
+ itemDef
+ {
+ name controlsBtn
+ text "Controls"
+ group menuGrp
+ style WINDOW_STYLE_EMPTY
+ rect 160 20 64 20
+ type ITEM_TYPE_BUTTON
+ textalign ITEM_ALIGN_CENTER
+ textalignx 34
+ textaligny 18
+ textscale .35
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ hide optionsGrp;
+ show controls;
+ show look;
+
+ setitemcolor gameBtn forecolor 1.0 1.0 1.0 1.0;
+ setitemcolor controlsBtn forecolor 0.2 0.2 0.2 1.0;
+ setitemcolor systemBtn forecolor 1.0 1.0 1.0 1.0
+ }
+ }
+
+ itemDef
+ {
+ name systemBtn
+ text "System"
+ group menuGrp
+ style WINDOW_STYLE_EMPTY
+ rect 230 20 64 20
+ type ITEM_TYPE_BUTTON
+ textalign ITEM_ALIGN_CENTER
+ textalignx 34
+ textaligny 18
+ textscale .35
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ hide optionsGrp;
+ show system;
+ show ghardware;
+
+ setitemcolor gameBtn forecolor 1.0 1.0 1.0 1.0;
+ setitemcolor controlsBtn forecolor 1.0 1.0 1.0 1.0;
+ setitemcolor systemBtn forecolor 0.2 0.2 0.2 1.0
+ }
+ }
+
+//////// GAME
+
+ itemDef
+ {
+ name game
+ group optionsGrp
+ type ITEM_TYPE_EDITFIELD
+ style 0
+ text "Name:"
+ cvar "name"
+ maxchars 26
+ rect 90 85 192 15
+ textalign ITEM_ALIGN_LEFT
+ textalignx 64
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ }
+
+ itemDef
+ {
+ name game
+ group optionsGrp
+ type ITEM_TYPE_YESNO
+ text "Auto Download:"
+ cvar "cl_allowDownload"
+ rect 90 120 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 128
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name game
+ group optionsGrp
+ type ITEM_TYPE_YESNO
+ text "Taunts Off:"
+ cvar "cg_noTaunt"
+ rect 90 135 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 128
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name game
+ group optionsGrp
+ type ITEM_TYPE_YESNO
+ text "Team Chats Only:"
+ cvar "cg_teamChatsOnly"
+ rect 90 150 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 128
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name game
+ group optionsGrp
+ type ITEM_TYPE_YESNO
+ text "Auto Wallwalk Pitching:"
+ cvar "cg_wwFollow"
+ rect 90 165 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 128
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name game
+ group optionsGrp
+ type ITEM_TYPE_MULTI
+ text "Wallwalking Speed:"
+ cvarfloat "cg_wwSmoothTime" 300 0 1000
+ cvarFloatList { "Medium" 300 "Fast" 150 "Instant" 0 "Slow" 600 }
+ rect 90 180 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 128
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name game
+ group optionsGrp
+ type ITEM_TYPE_YESNO
+ text "Wallwalk Control Toggles:"
+ cvar "cg_wwToggle"
+ rect 90 195 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 128
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name game
+ group optionsGrp
+ type ITEM_TYPE_YESNO
+ text "Disable Warning Dialogs:"
+ cvar "cg_disableWarningDialogs"
+ rect 90 210 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 128
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+
+//////// CONTROLS
+
+ //Controls menu
+ itemDef
+ {
+ name controls
+ text "Look"
+ group optionsGrp
+ style WINDOW_STYLE_EMPTY
+ rect 20 60 64 20
+ type ITEM_TYPE_BUTTON
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 64
+ textaligny 16
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ hide optionsGrp;
+ show controls;
+ show look
+ }
+ }
+
+//////// LOOK
+
+ itemDef
+ {
+ name look
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Lookup:"
+ cvar "+lookup"
+ rect 96 85 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name look
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Look Down:"
+ cvar "+lookdown"
+ rect 96 100 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name look
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Mouse Look:"
+ cvar "+mlook"
+ rect 96 115 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name look
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Centerview:"
+ cvar "centerview"
+ rect 96 130 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name look
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "ZoomView:"
+ cvar "+zoom"
+ rect 96 145 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name look
+ group optionsGrp
+ type ITEM_TYPE_YESNO
+ text "Free Look:"
+ cvar "cl_freelook"
+ rect 96 160 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name look
+ group optionsGrp
+ type ITEM_TYPE_SLIDER
+ text "Mouse Sensitivity:"
+ cvarfloat "sensitivity" 5 1 30
+ rect 96 175 192 20
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 15
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ }
+
+ itemDef
+ {
+ name look
+ group optionsGrp
+ type ITEM_TYPE_YESNO
+ text "Invert Mouse:"
+ cvar "ui_mousePitch"
+ rect 96 195 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript update ui_mousePitch
+ }
+ }
+
+ itemDef
+ {
+ name look
+ group optionsGrp
+ type ITEM_TYPE_YESNO
+ text "Smooth Mouse:"
+ cvar "m_filter"
+ rect 96 210 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+//////// MOVE
+
+ itemDef
+ {
+ name controls
+ text "Move"
+ group optionsGrp
+ style WINDOW_STYLE_EMPTY
+ rect 20 80 64 20
+ type ITEM_TYPE_BUTTON
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 64
+ textaligny 16
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ hide optionsGrp;
+ show controls;
+ show move
+ }
+ }
+
+ itemDef
+ {
+ name move
+ group optionsGrp
+ type ITEM_TYPE_YESNO
+ text "Always Run:"
+ cvar "cl_run"
+ rect 96 65 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name move
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Run / Walk:"
+ cvar "+speed"
+ rect 96 80 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name move
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Sprint:"
+ cvar "boost"
+ rect 96 95 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name move
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Forward:"
+ cvar "+forward"
+ rect 96 110 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name move
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Backpedal:"
+ cvar "+back"
+ rect 96 125 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name move
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Move Left:"
+ cvar "+moveleft"
+ rect 96 140 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name move
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Move Right:"
+ cvar "+moveright"
+ rect 96 155 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name move
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Jump:"
+ cvar "+moveup"
+ rect 96 170 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name move
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Crouch:"
+ cvar "+movedown"
+ rect 96 185 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name move
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Turn Left:"
+ cvar "+left"
+ rect 96 200 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name move
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Turn Right:"
+ cvar "+right"
+ rect 96 215 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name move
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Strafe:"
+ cvar "+strafe"
+ rect 96 230 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+
+
+//////// UPGRADES
+
+ itemDef
+ {
+ name controls
+ text "Upgrades"
+ group optionsGrp
+ style WINDOW_STYLE_EMPTY
+ rect 20 100 64 20
+ type ITEM_TYPE_BUTTON
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 64
+ textaligny 16
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ hide optionsGrp;
+ show controls;
+ show upgrades
+ }
+ }
+
+ itemDef
+ {
+ name upgrades
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Primary Attack:"
+ cvar "+attack"
+ rect 96 90 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name upgrades
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Secondary Attack:"
+ cvar "+button5"
+ rect 96 105 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name upgrades
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Previous Upgrade:"
+ cvar "weapprev"
+ rect 96 120 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name upgrades
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Next Upgrade:"
+ cvar "weapnext"
+ rect 96 135 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name upgrades
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Activate Upgrade:"
+ cvar "+button2"
+ rect 96 150 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name upgrades
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Reload:"
+ cvar "reload"
+ rect 96 165 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name upgrades
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Buy Ammo:"
+ cvar "buy ammo"
+ rect 96 180 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name upgrades
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Use Medkit:"
+ cvar "itemact medkit"
+ rect 96 195 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+//////// MISC
+
+ itemDef
+ {
+ name controls
+ text "Misc"
+ group optionsGrp
+ style WINDOW_STYLE_EMPTY
+ rect 20 120 64 20
+ type ITEM_TYPE_BUTTON
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 64
+ textaligny 16
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ hide optionsGrp;
+ show controls;
+ show misc
+ }
+ }
+
+ itemDef
+ {
+ name misc
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Show Scores:"
+ cvar "+scores"
+ rect 96 80 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name misc
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Scroll Scores Up:"
+ cvar "scoresUp"
+ rect 96 95 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name misc
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Scroll Scores Down:"
+ cvar "scoresDown"
+ rect 96 110 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name misc
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Use Structure/Evolve:"
+ cvar "+button7"
+ rect 96 125 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name misc
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Deconstruct Structure:"
+ cvar "deconstruct"
+ rect 96 140 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name misc
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Gesture:"
+ cvar "+button3"
+ rect 96 155 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name misc
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Chat:"
+ cvar "messagemode"
+ rect 96 170 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name misc
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Team Chat:"
+ cvar "messagemode2"
+ rect 96 185 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name misc
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Target Chat:"
+ cvar "messagemode3"
+ rect 96 200 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name misc
+ group optionsGrp
+ type ITEM_TYPE_BIND
+ text "Attack Chat:"
+ cvar "messagemode4"
+ rect 96 215 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ maxPaintChars 20
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+//////// SYSTEM
+
+ //System menu
+ itemDef
+ {
+ name system
+ text "GFX Hardware"
+ group optionsGrp
+ style WINDOW_STYLE_EMPTY
+ rect 20 60 64 20
+ type ITEM_TYPE_BUTTON
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 64
+ textaligny 16
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ hide optionsGrp;
+ show system;
+ show ghardware
+ }
+ }
+
+//////// GFX HARDWARE
+
+ itemDef
+ {
+ name ghardware
+ group optionsGrp
+ type ITEM_TYPE_MULTI
+ text "Quality:"
+ cvar "ui_glCustom"
+ cvarFloatList { "High Quality" 0 "Normal" 1 "Fast" 2 "Fastest" 3 "Custom" 4 }
+ rect 96 55 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 100
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript update "ui_glCustom"
+ }
+ }
+
+ itemDef
+ {
+ name ghardware
+ group optionsGrp
+ type ITEM_TYPE_EDITFIELD
+ text "GL Driver:"
+ cvar "r_gldriver"
+ //cvarFloatList { }
+ rect 96 70 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 100
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ decoration
+ }
+
+ itemDef
+ {
+ name ghardware
+ group optionsGrp
+ type ITEM_TYPE_YESNO
+ text "GL Extensions:"
+ cvar "r_allowExtensions"
+ rect 96 85 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 100
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript glCuston
+ }
+ }
+
+ itemDef
+ {
+ name ghardware
+ group optionsGrp
+ type ITEM_TYPE_MULTI
+ text "Video Mode:"
+ cvar "r_mode"
+ cvarFloatList { "320x240" 0 "400x300" 1 "512x384" 2 "640x480" 3
+ "800x600" 4 "960x720" 5 "1024x768" 6 "1152x864" 7
+ "1280x1024" 8 "1600x1200" 9 "2048x1536" 10 "856x480 wide screen" 11 }
+ rect 96 100 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 100
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript glCustom
+ }
+ }
+
+ itemDef
+ {
+ name ghardware
+ group optionsGrp
+ type ITEM_TYPE_MULTI
+ text "Color Depth:"
+ cvar "r_colorbits"
+ cvarFloatList { "Default" 0 "16 bit" 16 "32 bit" 32 }
+ rect 96 115 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 100
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript glCustom;
+ uiScript update "r_colorbits"
+ }
+ }
+
+ itemDef
+ {
+ name ghardware
+ group optionsGrp
+ type ITEM_TYPE_YESNO
+ text "Fullscreen:"
+ cvar "r_fullscreen"
+ rect 96 130 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 100
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript glCustom
+ }
+ }
+
+ itemDef
+ {
+ name ghardware
+ group optionsGrp
+ type ITEM_TYPE_MULTI
+ text "Lighting:"
+ cvar "r_vertexlight"
+ cvarFloatList { "Light Map (high)" 0 "Vertex (low)" 1 }
+ rect 96 145 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 100
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript glCustom
+ }
+ }
+
+ itemDef
+ {
+ name ghardware
+ group optionsGrp
+ type ITEM_TYPE_MULTI
+ text "Geometric Detail:"
+ cvar "r_lodbias"
+ cvarFloatList { "High" 0 "Medium" 1 "Low" 2 }
+ rect 96 160 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 100
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript glCustom;
+ uiScript update "r_lodbias"
+ }
+ }
+
+ itemDef
+ {
+ name ghardware
+ group optionsGrp
+ type ITEM_TYPE_MULTI
+ text "Texture Detail:"
+ cvar "r_picmip"
+ cvarFloatList { "Low" 2 "Normal" 1 "High" 0 }
+ rect 96 175 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 100
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript glCustom
+ }
+ }
+
+ itemDef
+ {
+ name ghardware
+ group optionsGrp
+ type ITEM_TYPE_MULTI
+ text "Texture Quality:"
+ cvar "r_texturebits"
+ cvarFloatList { "Default" 0 "16 bit" 16 "32 bit" 32 }
+ rect 96 190 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 100
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name ghardware
+ group optionsGrp
+ type ITEM_TYPE_MULTI
+ text "Texture Filter:"
+ cvar "r_texturemode"
+ cvarStrList { "Bilinear", "GL_LINEAR_MIPMAP_NEAREST", "Trilinear", "GL_LINEAR_MIPMAP_LINEAR" }
+ rect 96 205 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 100
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript glCustom
+ }
+ }
+
+ itemDef
+ {
+ name ghardware
+ group optionsGrp
+ type ITEM_TYPE_YESNO
+ text "Compress Textures:"
+ cvar "r_ext_compressed_textures "
+ rect 96 220 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 100
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript glCustom
+ }
+ }
+
+ itemDef
+ {
+ name ghardware
+ group optionsGrp
+ type ITEM_TYPE_BUTTON
+ text "APPLY"
+ textscale .25
+ style WINDOW_STYLE_EMPTY
+ rect 144 240 75 20
+ textalign ITEM_ALIGN_CENTER
+ textalignx 37
+ textaligny 15
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ exec "vid_restart"
+ }
+ }
+
+//////// GFX SOFTWARE
+
+ itemDef
+ {
+ name system
+ text "GFX Software"
+ group optionsGrp
+ style WINDOW_STYLE_EMPTY
+ rect 20 80 64 20
+ type ITEM_TYPE_BUTTON
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 64
+ textaligny 16
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ hide optionsGrp;
+ show system;
+ show gsoftware
+ }
+ }
+
+ itemDef
+ {
+ name gsoftware
+ group optionsGrp
+ type ITEM_TYPE_SLIDER
+ text "Brightness:"
+ cvarfloat "r_gamma" 1 .5 2
+ rect 96 60 192 20
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 80
+ textaligny 17
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ }
+
+ itemDef
+ {
+ name gsoftware
+ group optionsGrp
+ type ITEM_TYPE_SLIDER
+ text "Screen Size:"
+ cvarfloat "cg_viewsize" 100 30 100
+ //cvarFloatList { }
+ rect 96 80 192 20
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 80
+ textaligny 17
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ }
+
+ itemDef
+ {
+ name gsoftware
+ group optionsGrp
+ type ITEM_TYPE_YESNO
+ text "Simple Items:"
+ cvar "cg_simpleItems"
+ rect 96 100 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 100
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name gsoftware
+ group optionsGrp
+ type ITEM_TYPE_YESNO
+ text "Marks On Walls:"
+ cvar "cg_marks"
+ rect 96 115 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 100
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name gsoftware
+ group optionsGrp
+ type ITEM_TYPE_MULTI
+ text "Ejecting Brass:"
+ cvar "cg_brassTime"
+ cvarFloatList { "High" 2500 "Med" 1250 "Off" 0 }
+ rect 96 130 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 100
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name gsoftware
+ group optionsGrp
+ type ITEM_TYPE_YESNO
+ text "Dynamic Lights:"
+ cvar "r_dynamiclight"
+ rect 96 145 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 100
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name gsoftware
+ group optionsGrp
+ type ITEM_TYPE_YESNO
+ text "Draw Gun:"
+ cvar "cg_drawGun"
+ rect 96 160 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 100
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name gsoftware
+ group optionsGrp
+ type ITEM_TYPE_YESNO
+ text "Low Quality Sky:"
+ cvar "r_fastsky"
+ rect 96 175 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 100
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name gsoftware
+ group optionsGrp
+ type ITEM_TYPE_YESNO
+ text "Sync Every Frame:"
+ cvar "weapon 5"
+ rect 96 190 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 100
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name gsoftware
+ group optionsGrp
+ type ITEM_TYPE_YESNO
+ text "Show Time:"
+ cvar "cg_drawTimer"
+ rect 96 205 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 100
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name gsoftware
+ group optionsGrp
+ type ITEM_TYPE_YESNO
+ text "In Game Videos:"
+ cvar "r_inGameVideo"
+ rect 96 220 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 100
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name gsoftware
+ group optionsGrp
+ type ITEM_TYPE_YESNO
+ text "Depth Sort Particles:"
+ cvar "cg_depthSortParticles"
+ rect 96 235 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 100
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name gsoftware
+ group optionsGrp
+ type ITEM_TYPE_MULTI
+ text "Light Flares:"
+ cvar "cg_lightFlare"
+ cvarFloatList { "Off" 0 "No Fade" 1 "Timed Fade" 2 "Real Fade" 3 }
+ rect 96 250 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 100
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+//////// GL INFO
+
+ itemDef
+ {
+ name system
+ text "GL Info"
+ group optionsGrp
+ style WINDOW_STYLE_EMPTY
+ rect 20 100 64 20
+ type ITEM_TYPE_BUTTON
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 64
+ textaligny 16
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ hide optionsGrp;
+ show system;
+ show glinfo
+ }
+ }
+
+ itemDef
+ {
+ name glinfo
+ group optionsGrp
+ rect 104 35 230 230
+ ownerdraw UI_GLINFO
+ textalign 1
+ textscale .15
+ textalignx 0
+ textaligny 17
+ forecolor 1 1 1 1
+ visible 0
+ decoration
+ }
+
+//////// NET & SOUND
+
+ itemDef
+ {
+ name system
+ text "Net & Sound"
+ group optionsGrp
+ style WINDOW_STYLE_EMPTY
+ rect 20 120 64 20
+ type ITEM_TYPE_BUTTON
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 64
+ textaligny 16
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ hide optionsGrp;
+ show system;
+ show netsound
+ }
+ }
+
+ itemDef
+ {
+ name netsound
+ group optionsGrp
+ style 1
+ text "Sound"
+ rect 96 70 192 20
+ textalign ITEM_ALIGN_CENTER
+ textalignx 80
+ textaligny 17
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ decoration
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name netsound
+ group optionsGrp
+ type ITEM_TYPE_SLIDER
+ text "Effects Volume:"
+ cvarfloat "s_volume" 0.7 0 1
+ rect 96 90 192 20
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ textaligny 17
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ }
+
+ itemDef
+ {
+ name netsound
+ group optionsGrp
+ type ITEM_TYPE_SLIDER
+ text "Music Volume:"
+ cvarfloat "s_musicvolume" 0.25 0 1
+ rect 96 110 192 20
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 90
+ textaligny 17
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ }
+
+ itemDef
+ {
+ name netsound
+ group optionsGrp
+ type ITEM_TYPE_MULTI
+ text "Sound Quality:"
+ cvar "s_khz"
+ cvarFloatList { "22 khz (high)" 22 "11 khz (low)" 11 }
+ rect 96 130 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 100
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name netsound
+ group optionsGrp
+ type ITEM_TYPE_YESNO
+ text "Doppler Sound:"
+ cvar "s_doppler"
+ rect 96 145 192 15
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 100
+ textaligny 12
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+
+ itemDef
+ {
+ name netsound
+ group optionsGrp
+ style 1
+ text "Network"
+ rect 96 190 192 20
+ textalign ITEM_ALIGN_CENTER
+ textalignx 80
+ textaligny 17
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ decoration
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+
+ itemDef
+ {
+ name netsound
+ group optionsGrp
+ type ITEM_TYPE_MULTI
+ text "Net Data Rate:"
+ cvar "rate"
+ cvarFloatList { "<=28.8k" 2500 "33.6k" 3000 "56k" 4000 "ISDN" 5000 "LAN/CABLE/xDSl" 25000 }
+ rect 96 210 192 20
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 100
+ textaligny 17
+ textscale .25
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ }
+ }
+ }
+}
diff --git a/tremulous_ui/ingame_vote.menu b/tremulous_ui/ingame_vote.menu
new file mode 100644
index 00000000..7db61f5f
--- /dev/null
+++ b/tremulous_ui/ingame_vote.menu
@@ -0,0 +1,515 @@
+#include "ui/menudef.h"
+
+{
+ \\ VOTE MENU \\
+
+ menuDef
+ {
+ name "ingame_vote"
+ visible 0
+ fullscreen 0
+ outOfBoundsClick // this closes the window if it gets a click out of the rectangle
+ rect 27 56 260 107
+ focusColor 1 .75 0 1
+
+ itemDef
+ {
+ name window
+ ownerdrawflag UI_SHOW_CANVOTE
+ ownerdrawflag UI_SHOW_CANTEAMVOTE
+ rect 10 5 240 47
+ style WINDOW_STYLE_FILLED
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+
+ border WINDOW_BORDER_KCGRADIENT
+ borderSize 2.0
+ borderColor 0.5 0.5 0.5 1
+ }
+
+ itemDef
+ {
+ name window
+ ownerdrawflag UI_SHOW_VOTEACTIVE
+ ownerdrawflag UI_SHOW_CANTEAMVOTE
+ rect 10 5 240 72
+ style WINDOW_STYLE_FILLED
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+
+ border WINDOW_BORDER_KCGRADIENT
+ borderSize 2.0
+ borderColor 0.5 0.5 0.5 1
+ }
+
+ itemDef
+ {
+ name window
+ ownerdrawflag UI_SHOW_TEAMVOTEACTIVE
+ rect 10 5 240 97
+ style WINDOW_STYLE_FILLED
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+
+ border WINDOW_BORDER_KCGRADIENT
+ borderSize 2.0
+ borderColor 0.5 0.5 0.5 1
+ }
+
+ itemDef
+ {
+ name callvote
+ text "Call Vote"
+ type 1
+ ownerdrawflag UI_SHOW_CANVOTE
+ textscale .35
+ rect 30 20 100 20
+ textalign ITEM_ALIGN_CENTER
+ textalignx 50
+ textaligny 17
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ close ingame_vote;
+ open ingame_callvote
+ }
+ }
+
+ itemDef
+ {
+ name callteamvote
+ text "Call Team Vote"
+ type 1
+ ownerdrawflag UI_SHOW_CANTEAMVOTE
+ textscale .35
+ rect 130 20 100 20
+ textalign ITEM_ALIGN_CENTER
+ textalignx 50
+ textaligny 17
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ close ingame_vote;
+ open ingame_callteamvote
+ }
+ }
+
+ itemDef
+ {
+ name yes
+ text "Vote Yes"
+ type 1
+ ownerdrawflag UI_SHOW_VOTEACTIVE
+ textscale .35
+ rect 30 45 100 20
+ textalign ITEM_ALIGN_CENTER
+ textalignx 50
+ textaligny 17
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ exec "vote yes";
+ uiScript closeingame
+ }
+ }
+
+ itemDef
+ {
+ name no
+ text "Vote No"
+ type 1
+ ownerdrawflag UI_SHOW_VOTEACTIVE
+ textscale .35
+ rect 130 45 100 20
+ textalign ITEM_ALIGN_CENTER
+ textalignx 50
+ textaligny 17
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu4.wav";
+ exec "vote no";
+ uiScript closeingame
+ }
+ }
+
+ itemDef
+ {
+ name teamyes
+ text "Team Vote Yes"
+ type 1
+ ownerdrawflag UI_SHOW_TEAMVOTEACTIVE
+ textscale .35
+ rect 30 70 100 20
+ textalign ITEM_ALIGN_CENTER
+ textalignx 50
+ textaligny 17
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ exec "teamvote yes";
+ uiScript closeingame
+ }
+ }
+
+ itemDef
+ {
+ name teamno
+ text "Team Vote No"
+ type 1
+ ownerdrawflag UI_SHOW_TEAMVOTEACTIVE
+ textscale .35
+ rect 130 70 100 20
+ textalign ITEM_ALIGN_CENTER
+ textalignx 50
+ textaligny 17
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu4.wav";
+ exec "teamvote no";
+ uiScript closeingame
+ }
+ }
+
+/* itemDef
+ {
+ name miscBtn
+ text "Misc"
+ textscale .25
+ group grpbutton
+ rect 20 75 45 20
+ type ITEM_TYPE_BUTTON
+ textalign ITEM_ALIGN_CENTER
+ textalignx 22
+ textaligny 16
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ hide grpCallVote;
+ show misc;
+
+ setitemcolor miscBtn forecolor 0.2 0.2 0.2 1.0;
+ setitemcolor kickBtn forecolor 1.0 1.0 1.0 1.0;
+ setitemcolor teamKickBtn forecolor 1.0 1.0 1.0 1.0;
+ setitemcolor mapBtn forecolor 1.0 1.0 1.0 1.0
+ }
+ }
+
+ itemDef
+ {
+ name kickBtn
+ text "Kick"
+ textscale .25
+ group grpbutton
+ rect 20 100 45 20
+ type ITEM_TYPE_BUTTON
+ textalign ITEM_ALIGN_CENTER
+ textalignx 22
+ textaligny 16
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ hide grpCallVote;
+ show kick;
+
+ setitemcolor miscBtn forecolor 1.0 1.0 1.0 1.0;
+ setitemcolor kickBtn forecolor 0.2 0.2 0.2 1.0;
+ setitemcolor teamKickBtn forecolor 1.0 1.0 1.0 1.0;
+ setitemcolor mapBtn forecolor 1.0 1.0 1.0 1.0
+ }
+ }
+
+ itemDef
+ {
+ name teamKickBtn
+ text "Team Kick"
+ textscale .25
+ group grpbutton
+ rect 20 125 45 20
+ type ITEM_TYPE_BUTTON
+ textalign ITEM_ALIGN_CENTER
+ textalignx 22
+ textaligny 16
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ hide grpCallVote;
+ show teamKick;
+
+ setitemcolor miscBtn forecolor 1.0 1.0 1.0 1.0;
+ setitemcolor kickBtn forecolor 1.0 1.0 1.0 1.0;
+ setitemcolor teamKickBtn forecolor 0.2 0.2 0.2 1.0;
+ setitemcolor mapBtn forecolor 1.0 1.0 1.0 1.0
+ }
+ }
+
+ itemDef
+ {
+ name mapBtn
+ text "Map"
+ textscale .25
+ group grpbutton
+ rect 20 150 45 20
+ type ITEM_TYPE_BUTTON
+ textalign ITEM_ALIGN_CENTER
+ textalignx 22
+ textaligny 16
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ hide grpCallVote;
+ show map;
+
+ setitemcolor miscBtn forecolor 1.0 1.0 1.0 1.0;
+ setitemcolor kickBtn forecolor 1.0 1.0 1.0 1.0;
+ setitemcolor teamKickBtn forecolor 1.0 1.0 1.0 1.0;
+ setitemcolor mapBtn forecolor 0.2 0.2 0.2 1.0
+ }
+ }
+
+
+ // MISC //
+
+ itemDef
+ {
+ name misc
+ text "Restart Map"
+ group grpCallVote
+ textscale .25
+ rect 100 105 96 20
+ type 1
+ textalign 1
+ textalignx 50
+ textaligny 16
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ exec "cmd callvote map_restart";
+ uiScript closeingame
+ }
+ }
+
+ itemDef
+ {
+ name misc
+ group grpCallVote
+ text "Next Map"
+ textscale .25
+ rect 100 135 96 20
+ type 1
+ textalign 1
+ textalignx 50
+ textaligny 16
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ exec "cmd callvote nextmap";
+ uiScript closeingame
+ }
+ }
+
+
+ // KICK PLAYER //
+
+ itemDef
+ {
+ name kick
+ group grpCallVote
+ text "Kick Player:"
+ textscale .25
+ rect 80 75 110 20
+ textalign 0
+ textalignx 0
+ textaligny 16
+ forecolor 1 1 1 1
+ visible 0
+ decoration
+ }
+
+ itemDef
+ {
+ name kick
+ group grpCallVote
+ rect 80 95 150 85
+ style WINDOW_STYLE_EMPTY
+ type ITEM_TYPE_LISTBOX
+ elementwidth 120
+ elementheight 15
+ textscale .25
+ elementtype LISTBOX_TEXT
+ feeder FEEDER_PLAYER_LIST
+ border 1
+ bordercolor 0.5 0.5 0.5 0.5
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ outlinecolor 0.1 0.1 0.1 0.5
+ visible 0
+ }
+
+ itemDef
+ {
+ name kick
+ text "OK"
+ type ITEM_TYPE_BUTTON
+ textscale .25
+ group grpCallVote
+ rect 183 185 50 20
+ textalign 1
+ textalignx 25
+ textaligny 15
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript voteKick;
+ uiScript closeingame
+ }
+ }
+
+
+ // TEAM KICK PLAYER //
+
+ itemDef
+ {
+ name teamKick
+ group grpCallVote
+ text "Team Kick Player:"
+ textscale .25
+ rect 80 75 110 20
+ textalign 0
+ textalignx 0
+ textaligny 16
+ forecolor 1 1 1 1
+ visible 0
+ decoration
+ }
+
+ itemDef
+ {
+ name teamKick
+ group grpCallVote
+ rect 80 95 150 85
+ style WINDOW_STYLE_EMPTY
+ type ITEM_TYPE_LISTBOX
+ elementwidth 120
+ elementheight 15
+ textscale .25
+ elementtype LISTBOX_TEXT
+ feeder FEEDER_TEAM_LIST
+ border 1
+ bordercolor 0.5 0.5 0.5 0.5
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ outlinecolor 0.1 0.1 0.1 0.5
+ visible 0
+ }
+
+ itemDef
+ {
+ name teamKick
+ text "OK"
+ type ITEM_TYPE_BUTTON
+ textscale .25
+ group grpCallVote
+ rect 183 185 50 20
+ textalign 1
+ textalignx 25
+ textaligny 15
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript voteTeamKick;
+ uiScript closeingame
+ }
+ }
+
+
+ // NEW MAP //
+
+ itemDef
+ {
+ name map
+ group grpCallVote
+ text "New Map:"
+ ownerdraw UI_ALLMAPS_SELECTION
+ textscale .25
+ rect 80 75 110 20
+ textalign 0
+ textalignx 0
+ textaligny 16
+ forecolor 1 1 1 1
+ decoration
+ visible 0
+ }
+
+ itemDef
+ {
+ name map
+ group grpCallVote
+ rect 80 95 150 85
+ type ITEM_TYPE_LISTBOX
+ style WINDOW_STYLE_EMPTY
+ elementwidth 120
+ elementheight 15
+ textscale .25
+ elementtype LISTBOX_TEXT
+ feeder FEEDER_ALLMAPS
+ border 1
+ bordercolor 0.5 0.5 0.5 0.5
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ outlinecolor 0.1 0.1 0.1 0.5
+ visible 0
+ }
+
+ itemDef
+ {
+ name map
+ text "OK"
+ type ITEM_TYPE_BUTTON
+ textscale .25
+ group grpCallVote
+ rect 183 185 50 20
+ textalign 1
+ textalignx 25
+ textaligny 15
+ forecolor 1 1 1 1
+ visible 0
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript voteMap;
+ uiScript closeingame
+ }
+ }*/
+ }
+}
diff --git a/tremulous_ui/joinserver.menu b/tremulous_ui/joinserver.menu
new file mode 100644
index 00000000..ace7a90a
--- /dev/null
+++ b/tremulous_ui/joinserver.menu
@@ -0,0 +1,772 @@
+#include "ui/menudef.h"
+
+{
+
+ \\ Server Join \\
+
+ menuDef
+ {
+ name "joinserver"
+ visible 0
+ fullscreen 1
+ rect 0 0 640 480
+ focusColor 1 .75 0 1
+ outOfBoundsClick
+ style 0
+ onOpen
+ {
+ uiScript UpdateFilter;
+ hide accept_alt;
+ show accept;
+ hide back_alt;
+ show back;
+ hide grpmessage
+ }
+
+ onEsc { uiScript closeJoin }
+
+ itemDef
+ {
+ name background
+ rect 0 0 640 480
+ style WINDOW_STYLE_FILLED
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+ }
+
+ // DATE AND MESSAGE OF THE DAY //
+
+ itemDef
+ {
+ name datewindow
+ rect 10 365 265 25
+ style WINDOW_STYLE_FILLED
+ border 1
+ bordercolor .5 .5 .5 1
+ backcolor 0 0 0 .15
+ visible 1
+ }
+
+ itemDef
+ {
+ name messagewindow
+ rect 275 365 355 25
+ style WINDOW_STYLE_FILLED
+ border 1
+ bordercolor .5 .5 .5 1
+ backcolor 0 0 0 .15
+ visible 1
+ }
+
+ itemDef
+ {
+ name refreshdate
+ ownerdraw UI_SERVERREFRESHDATE
+ textscale .33
+ rect 10 365 265 25
+ textalign 0
+ textalignx 10
+ textaligny 20
+ forecolor 1 1 1 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name messageoftheday
+ ownerdraw UI_SERVERMOTD
+ textscale .33
+ rect 280 365 345 25
+ forecolor 1 1 1 1
+ visible 1
+ decoration
+ }
+
+
+ // VIEW OPTIONS //
+
+ itemDef
+ {
+ name gametypefield
+ style WINDOW_STYLE_EMPTY
+ ownerdraw UI_NETSOURCE
+ rect 26 20 128 26
+ textalign ITEM_ALIGN_LEFT
+ textalignx 10
+ textaligny 22
+ textscale .4
+ forecolor 1 1 1 1
+ backcolor .5 .5 .5 .5
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav"
+ }
+ }
+
+ // BUTTONS //
+
+ itemDef
+ {
+ name refreshSource
+ text "Get New List"
+ type ITEM_TYPE_BUTTON
+ textscale .4
+ style WINDOW_STYLE_EMPTY
+ rect 190 20 128 26
+ textalign ITEM_ALIGN_LEFT
+ textalignx 10
+ textaligny 22
+ backcolor .5 .5 .5 .5
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript RefreshServers
+ }
+ }
+
+ itemDef
+ {
+ name refreshFilter
+ text "Refresh List"
+ textscale .4
+ style WINDOW_STYLE_EMPTY
+ type ITEM_TYPE_BUTTON
+ rect 354 20 128 26
+ textalign ITEM_ALIGN_LEFT
+ textalignx 10
+ textaligny 22
+ backcolor .5 .5 .5 .5
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript RefreshFilter
+ }
+ }
+
+ itemDef
+ {
+ name viewEmpty
+ style WINDOW_STYLE_EMPTY
+ type ITEM_TYPE_YESNO
+ text "View Empty:"
+ cvar "ui_browserShowEmpty"
+ textscale .4
+ rect 26 50 128 26
+ textalign ITEM_ALIGN_LEFT
+ textalignx 10
+ textaligny 22
+ forecolor 1 1 1 1
+ backcolor .5 .5 .5 .5
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript RefreshFilter
+ }
+ }
+
+ itemDef
+ {
+ name viewFull
+ style WINDOW_STYLE_EMPTY
+ type ITEM_TYPE_YESNO
+ text "View Full:"
+ cvar "ui_browserShowFull"
+ textscale .4
+ rect 190 50 128 26
+ textalign ITEM_ALIGN_LEFT
+ textalignx 10
+ textaligny 22
+ forecolor 1 1 1 1
+ backcolor .5 .5 .5 .5
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript RefreshFilter
+ }
+ }
+
+ itemDef
+ {
+ name PunkBusterInfo
+ group pbgrp
+ text "PunkBuster:"
+ type ITEM_TYPE_BUTTON
+ cvar "ui_browserShowEmpty"
+ textscale .4
+ style WINDOW_STYLE_FILLED
+ rect 354 50 128 26
+ textalign ITEM_ALIGN_LEFT
+ textalignx 10
+ textaligny 22
+ backcolor 0 0 0 0
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ conditionalopen cl_punkbuster pbdisable_popmenu pbenable_popmenu
+ }
+ }
+
+ itemDef
+ {
+ name pbstatus
+ group pbgrp
+ type ITEM_TYPE_MULTI
+ text ""
+ cvar "cl_punkbuster"
+ cvarFloatList { "Off" 0 "On" 1 }
+ rect 438 50 64 26
+ textalign ITEM_ALIGN_CENTER
+ textalignx 10
+ textaligny 22
+ textscale .4
+ forecolor 1 1 1 1
+ style WINDOW_STYLE_FILLED
+ backcolor 0 0 0 0
+ visible 1
+ decoration
+ }
+
+
+ // map selection
+
+ itemDef
+ {
+ name mappreview
+ style 0
+ ownerdraw UI_NETMAPCINEMATIC
+ rect 502 5 128 96
+ border 1
+ bordercolor 0 .5 0 .5
+ visible 1
+ }
+
+ itemDef
+ {
+ name mappreview
+ style WINDOW_STYLE_FILLED
+ rect 502 5 128 96
+ border 1
+ bordercolor .5 .5 .5 .5
+ visible 1
+ }
+
+ // COLUMNS //
+
+ itemDef
+ {
+ name serverColumn
+ group grpColumn
+ rect 10 130 333 232
+ style WINDOW_STYLE_FILLED
+ border 1
+ backcolor 0 0 0 0
+ bordersize 1
+ bordercolor .5 .5 .5 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name mapColumn
+ group grpColumn
+ rect 343 130 125 232
+ style WINDOW_STYLE_FILLED
+ border 1
+ backcolor 0 0 0 0
+ bordersize 1
+ bordercolor .5 .5 .5 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name playerColumn
+ group grpColumn
+ rect 468 130 60 232
+ style WINDOW_STYLE_FILLED
+ border 1
+ backcolor 0 0 0 0
+ bordersize 1
+ bordercolor .5 .5 .5 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name pbColumn
+ group grpColumn
+ rect 528 130 32 232
+ style WINDOW_STYLE_FILLED
+ border 1
+ backcolor 0 0 0 0
+ bordersize 1
+ bordercolor .5 .5 .5 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name pingColumn
+ group grpColumn
+ rect 560 130 52 232
+ style WINDOW_STYLE_FILLED
+ border 1
+ backcolor 0 0 0 0
+ bordersize 1
+ bordercolor .5 .5 .5 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name serverlist
+ rect 10 130 620 232
+ type ITEM_TYPE_LISTBOX
+ style WINDOW_STYLE_EMPTY
+ elementwidth 120
+ elementheight 20
+ textscale .33
+ elementtype LISTBOX_TEXT
+ feeder FEEDER_SERVERS
+ border 1
+ bordercolor 0.5 0.5 0.5 1
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ outlinecolor 0.1 0.1 0.1 0.5
+ visible 1
+ columns 5
+ 2 40 40 ITEM_ALIGN_LEFT
+ 343 40 20 ITEM_ALIGN_LEFT
+ 468 5 10 ITEM_ALIGN_LEFT
+ 528 5 10 ITEM_ALIGN_LEFT
+ 560 20 20 ITEM_ALIGN_LEFT
+
+ doubleClick { uiScript JoinServer }
+ }
+
+
+ // SORT TABS //
+
+ itemDef
+ {
+ name server
+ group grpTabs
+ text "Server Name"
+ type ITEM_TYPE_BUTTON
+ textscale .33
+ style WINDOW_STYLE_EMPTY
+ rect 10 103 333 26
+ textalign ITEM_ALIGN_LEFT
+ textalignx 10
+ textaligny 18
+ border 1
+ bordercolor 0.5 0.5 0.5 1
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ outlinecolor 0.1 0.1 0.1 0.5
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript ServerSort 0;
+
+ setitemcolor grpColumn backcolor 0 0 0 0;
+ setitemcolor serverColumn backcolor 0.3 1 1 0.5
+ }
+ }
+
+ itemDef
+ {
+ name map
+ group grpTabs
+ type ITEM_TYPE_BUTTON
+ text "Map Name"
+ textscale .33
+ style WINDOW_STYLE_EMPTY
+ rect 343 103 125 26
+ textalign ITEM_ALIGN_LEFT
+ textalignx 10
+ textaligny 18
+ border 1
+ bordercolor 0.5 0.5 0.5 1
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ outlinecolor 0.1 0.1 0.1 0.5
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript ServerSort 1;
+
+ setitemcolor grpColumn backcolor 0 0 0 0;
+ setitemcolor mapColumn backcolor 0.3 1 1 0.5
+ }
+ }
+
+ itemDef
+ {
+ name Players
+ group grpTabs
+ text "Players"
+ type ITEM_TYPE_BUTTON
+ textscale .33
+ style WINDOW_STYLE_EMPTY
+ rect 468 103 60 26
+ textalign ITEM_ALIGN_LEFT
+ textalignx 10
+ textaligny 18
+ border 1
+ bordercolor 0.5 0.5 0.5 1
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ outlinecolor 0.1 0.1 0.1 0.5
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript ServerSort 2;
+
+ setitemcolor grpColumn backcolor 0 0 0 0;
+ setitemcolor playerColumn backcolor 0.3 1 1 0.5
+ }
+ }
+
+ itemDef
+ {
+ name PB
+ group grpTabs
+ text "PB"
+ type ITEM_TYPE_BUTTON
+ textscale .33
+ style WINDOW_STYLE_EMPTY
+ rect 528 103 32 26
+ textalign ITEM_ALIGN_LEFT
+ textalignx 10
+ textaligny 18
+ border 1
+ bordercolor 0.5 0.5 0.5 1
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ outlinecolor 0.1 0.1 0.1 0.5
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript ServerSort 5;
+
+ setitemcolor grpColumn backcolor 0 0 0 0;
+ setitemcolor pbColumn backcolor 0.3 1 1 0.5
+ }
+ }
+
+
+ itemDef
+ {
+ name Ping
+ group grpTabs
+ text "Ping"
+ type ITEM_TYPE_BUTTON
+ textscale .33
+ style WINDOW_STYLE_EMPTY
+ rect 560 103 70 26
+ textalign ITEM_ALIGN_LEFT
+ textalignx 10
+ textaligny 18
+ border 1
+ bordercolor 0.5 0.5 0.5 1
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ outlinecolor 0.1 0.1 0.1 0.5
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript ServerSort 4;
+
+ setitemcolor grpColumn backcolor 0 0 0 0;
+ setitemcolor pingColumn backcolor 0.3 1 1 0.5
+ }
+ }
+
+
+ itemDef
+ {
+ name password
+ text "Password"
+ type ITEM_TYPE_BUTTON
+ textscale .4
+ style WINDOW_STYLE_FILLED
+ rect 20 395 92 26
+ textalign 1
+ textalignx 46 // center
+ textaligny 22
+ backcolor 0 0 0 1
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ open password_popmenu
+ }
+ }
+
+ itemDef
+ {
+ name createFavorite
+ text "New Favorite"
+ type ITEM_TYPE_BUTTON
+ textscale .4
+ style WINDOW_STYLE_FILLED
+ rect 148 395 92 26
+ textalign 1
+ textalignx 46 // center
+ textaligny 22
+ backcolor 0 0 0 1
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ open createfavorite_popmenu
+ }
+ }
+
+ itemDef
+ {
+ name addFavorite
+ text "Add Favorite"
+ type ITEM_TYPE_BUTTON
+ textscale .4
+ style WINDOW_STYLE_FILLED
+ ownerdrawFlag UI_SHOW_NOTFAVORITESERVERS
+ rect 276 395 92 26
+ textalign 1
+ textalignx 46 // center
+ textaligny 22
+ backcolor 0 0 0 1
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript addFavorite
+ }
+ }
+
+ itemDef
+ {
+ name delfavorite
+ text "Del. Favorite"
+ type ITEM_TYPE_BUTTON
+ textscale .4
+ style WINDOW_STYLE_FILLED
+ ownerdrawFlag UI_SHOW_FAVORITESERVERS
+ rect 276 395 92 26
+ textalign 1
+ textalignx 46 // center
+ textaligny 22
+ backcolor 0 0 0 1
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript DeleteFavorite;
+ uiScript UpdateFilter
+ }
+ }
+
+ itemDef
+ {
+ name serverinfo
+ text "Server Info"
+ type ITEM_TYPE_BUTTON
+ textscale .4
+ style WINDOW_STYLE_FILLED
+ rect 404 395 92 26
+ textalign 1
+ textalignx 46 // center
+ textaligny 22
+ backcolor 0 0 0 1
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ open serverinfo_popmenu
+ }
+ }
+
+ itemDef
+ {
+ name findplayer
+ text "Find Friend"
+ type ITEM_TYPE_BUTTON
+ textscale .4
+ style WINDOW_STYLE_FILLED
+ rect 532 395 92 26
+ textalign 1
+ textalignx 46 // center
+ textaligny 22
+ backcolor 0 0 0 1
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ open findplayer_popmenu
+ }
+ }
+
+
+
+ itemDef
+ {
+ name createServer
+ text "Create Server"
+ textscale .5
+ style WINDOW_STYLE_EMPTY
+ type ITEM_TYPE_BUTTON
+ rect 254 424 128 26
+ textalign ITEM_ALIGN_LEFT
+ textalignx 10
+ textaligny 32
+ backcolor .5 .5 .5 .5
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ close joinserver;
+ open createserver
+ }
+ }
+
+
+ // BACK BAR //
+
+ itemDef
+ {
+ name back
+ style 3
+ background "ui/assets/backarrow.tga"
+ rect 16 424 50 50
+ visible 1
+ action
+ {
+ play "sound/misc/menu4.wav";
+ close joinserver;
+ open main
+ }
+
+ mouseEnter
+ {
+ hide back;
+ show back_alt
+ }
+ }
+
+ itemDef
+ {
+ name back_alt
+ style WINDOW_STYLE_SHADER
+ background "ui/assets/backarrow_alt.tga"
+ rect 16 424 50 50
+ backcolor 0 0 0 0
+ forecolor 1 1 1 1
+ visible 0
+ type ITEM_TYPE_BUTTON
+
+ text "Back"
+ textalign ITEM_ALIGN_LEFT
+ textaligny 36
+ textalignx 60
+ textscale .6
+
+ mouseExit
+ {
+ hide back_alt;
+ show back
+ }
+
+ action
+ {
+ play "sound/misc/menu4.wav";
+ close joinserver;
+ open main
+ }
+ }
+
+
+
+
+ itemDef
+ {
+ name accept
+ style 3
+ rect 574 424 50 50
+ background "ui/assets/forwardarrow.tga"
+ backcolor 0 0 0 0
+ forecolor 1 1 1 1
+ visible 1
+ mouseEnter
+ {
+ hide accept;
+ show accept_alt
+ }
+
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript JoinServer
+ }
+ }
+
+ itemDef
+ {
+ name accept_alt
+ style WINDOW_STYLE_SHADER
+ rect 574 424 50 50
+ background "ui/assets/forwardarrow_alt.tga"
+ backcolor 0 0 0 0
+ type ITEM_TYPE_BUTTON
+ forecolor 1 1 1 1
+ visible 0
+ type ITEM_TYPE_BUTTON
+
+ text "Join"
+ textalign ITEM_ALIGN_LEFT
+ textaligny 36
+ textalignx -55
+ textscale .6
+
+ mouseExit
+ {
+ hide accept_alt;
+ show accept
+ }
+
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript JoinServer
+ }
+ }
+ }
+}
diff --git a/tremulous_ui/loading.menu b/tremulous_ui/loading.menu
new file mode 100644
index 00000000..744fa553
--- /dev/null
+++ b/tremulous_ui/loading.menu
@@ -0,0 +1,193 @@
+#include "ui/menudef.h"
+
+{
+ assetGlobalDef
+ {
+ cursor "ui/assets/3_cursor3" // cursor
+ gradientBar "ui/assets/gradientbar2.tga" // gradient bar
+ fadeClamp 1.0 // sets the fadeup alpha
+ fadeCycle 1 // how often fade happens in milliseconds
+ fadeAmount 0.1 // amount to adjust alpha per cycle
+
+ shadowX 5 // x amount for shadow offset
+ shadowY 5 // y amount for shadow offset
+ shadowColor 0.1 0.1 0.1 0.25 // shadow color
+
+ font "fonts/font" 26 // font
+ smallFont "fonts/smallfont" 20 // font
+ bigFont "fonts/bigfont" 34 // font
+ }
+
+ menuDef
+ {
+ name "Loading"
+ rect 0 0 640 480
+ fullScreen MENU_TRUE
+
+ itemDef
+ {
+ name background
+ rect 0 0 640 480
+ style WINDOW_STYLE_FILLED
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name "levelname"
+ rect 20 20 260 20
+ visible 1
+ decoration
+ forecolor 1 1 1 1
+ align ITEM_ALIGN_LEFT
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ textscale 0.4
+ textaligny 28
+ textalignx 0
+ ownerdraw CG_LOAD_LEVELNAME
+ }
+
+ itemDef
+ {
+ name "hostname"
+ rect 20 100 260 20
+ visible 1
+ decoration
+ forecolor 1 1 1 1
+ align ITEM_ALIGN_LEFT
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ textscale 0.4
+ textaligny 28
+ textalignx 0
+ ownerdraw CG_LOAD_HOSTNAME
+ }
+
+ itemDef
+ {
+ name "motd"
+ rect 20 180 260 20
+ visible 1
+ decoration
+ forecolor 1 1 1 1
+ align ITEM_ALIGN_LEFT
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ textscale 0.4
+ textaligny 28
+ textalignx 0
+ ownerdraw CG_LOAD_MOTD
+ }
+
+ itemDef
+ {
+ name "levelshot"
+ rect 300 20 320 240
+ visible 1
+ decoration
+ forecolor 1 1 1 1
+ ownerdraw CG_LOAD_LEVELSHOT
+ }
+
+ itemDef
+ {
+ name "media"
+ rect 20 300 380 30
+ visible 1
+ decoration
+ forecolor 0.0 0.8 1 1
+ ownerdraw CG_LOAD_MEDIA
+ align ITEM_ALIGN_CENTER
+ textstyle ITEM_TEXTSTYLE_NEON
+ textscale 0.5
+ special 1.0
+ }
+
+ itemDef
+ {
+ name "medialabel"
+ style WINDOW_STYLE_EMPTY
+ textscale 0.6
+ rect 420 300 200 40
+ align ITEM_ALIGN_RIGHT
+ textaligny 28
+ textalignx 0
+ forecolor 0.0 0.8 1 1
+ visible 1
+ decoration
+ ownerdraw CG_LOAD_MEDIA_LABEL
+ }
+
+ itemDef
+ {
+ name "buildables"
+ rect 20 340 380 30
+ visible 1
+ decoration
+ forecolor 0.0 0.8 1 1
+ ownerdraw CG_LOAD_BUILDABLES
+ align ITEM_ALIGN_CENTER
+ textstyle ITEM_TEXTSTYLE_NEON
+ textscale 0.5
+ special 1.0
+ }
+
+ itemDef
+ {
+ name "buildableslabel"
+ style WINDOW_STYLE_EMPTY
+ textscale 0.6
+ rect 420 340 200 40
+ align ITEM_ALIGN_RIGHT
+ textaligny 28
+ textalignx 0
+ forecolor 0.0 0.8 1 1
+ visible 1
+ decoration
+ ownerdraw CG_LOAD_BUILDABLES_LABEL
+ }
+
+ itemDef
+ {
+ name "charmodel"
+ rect 20 380 380 30
+ visible 1
+ decoration
+ forecolor 0.0 0.8 1 1
+ ownerdraw CG_LOAD_CHARMODEL
+ align ITEM_ALIGN_CENTER
+ textstyle ITEM_TEXTSTYLE_NEON
+ textscale 0.5
+ special 1.0
+ }
+
+ itemDef
+ {
+ name "charmodellabel"
+ style WINDOW_STYLE_EMPTY
+ textscale 0.6
+ rect 420 380 200 40
+ align ITEM_ALIGN_RIGHT
+ textaligny 28
+ textalignx 0
+ forecolor 0.0 0.8 1 1
+ visible 1
+ decoration
+ ownerdraw CG_LOAD_CHARMODEL_LABEL
+ }
+
+ itemDef
+ {
+ name "overall"
+ rect 20 420 600 30
+ visible 1
+ decoration
+ forecolor 0.0 0.8 1 1
+ ownerdraw CG_LOAD_OVERALL
+ align ITEM_ALIGN_CENTER
+ textstyle ITEM_TEXTSTYLE_NEON
+ textscale 0.5
+ special 1.0
+ }
+ }
+}
diff --git a/tremulous_ui/main.menu b/tremulous_ui/main.menu
new file mode 100644
index 00000000..4103997d
--- /dev/null
+++ b/tremulous_ui/main.menu
@@ -0,0 +1,141 @@
+#include "ui/menudef.h"
+
+{
+ assetGlobalDef
+ {
+ font "fonts/font" 26 // font
+ smallFont "fonts/smallfont" 20 // font
+ bigFont "fonts/bigfont" 34 // font
+ cursor "ui/assets/3_cursor3" // cursor
+ gradientBar "ui/assets/gradientbar2.tga" // gradient bar
+ itemFocusSound "sound/misc/menu2.wav" // sound for item getting focus (via keyboard or mouse )
+
+ fadeClamp 1.0 // sets the fadeup alpha
+ fadeCycle 1 // how often fade happens in milliseconds
+ fadeAmount 0.1 // amount to adjust alpha per cycle
+
+ shadowColor 0.1 0.1 0.1 0.25 // shadow color
+ }
+
+
+
+
+
+ menuDef
+ {
+ name main
+ fullScreen MENU_TRUE
+ rect 0 0 640 480 // Size and position of the menu
+ visible MENU_TRUE // Visible on open
+ focusColor 1 .75 0 1 // Menu focus color for text and items
+
+ onOpen { uiScript stopRefresh ; playlooped "sound/ui/heartbeat.wav" }
+ onESC { open quit_popmenu }
+
+ itemDef
+ {
+ name background
+ rect 0 0 640 480
+ style WINDOW_STYLE_SHADER
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+ background "ui/assets/mainmenu.jpg"
+ }
+
+ itemDef
+ {
+ name splashmodel
+ rect 0 0 640 480
+ type ITEM_TYPE_MODEL
+ style WINDOW_STYLE_EMPTY
+ asset_model "models/splash/splash_screen.md3"
+ model_fovx 32.0
+ model_fovy 24.0
+ model_angle 180
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name mainmenu
+ text "Play"
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ rect 472 20 128 20
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 128
+ textaligny 20
+ textscale .416
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ close main;
+ open joinserver
+ }
+ }
+
+ itemDef
+ {
+ name mainmenu
+ text "Mods"
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ textscale .416
+ rect 472 40 128 20
+ textalignx 128
+ textaligny 20
+ textalign ITEM_ALIGN_RIGHT
+ backcolor 0 0 0 0
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ open mod
+ }
+ }
+
+ itemDef
+ {
+ name mainmenu
+ text "Quit"
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ rect 472 60 128 20
+ textalignx 128
+ textaligny 20
+ textscale .416
+ textalign ITEM_ALIGN_RIGHT
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ open quit_popmenu
+ }
+ }
+
+ itemDef
+ {
+ name copyright
+ text "Tremulous (C) 2005 darklegion development"
+ style WINDOW_STYLE_EMPTY
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ textscale .25
+ rect 0 440 640 40
+ textalign 1
+ textaligny 32
+ textalignx 320
+ forecolor .75 .75 .75 .75
+ visible 1
+ decoration
+ }
+ }
+}
diff --git a/tremulous_ui/menus.txt b/tremulous_ui/menus.txt
new file mode 100644
index 00000000..cdd0721c
--- /dev/null
+++ b/tremulous_ui/menus.txt
@@ -0,0 +1,19 @@
+// menu defs
+//
+{
+ loadMenu { "ui/main.menu" }
+ loadMenu { "ui/joinserver.menu" }
+ loadMenu { "ui/punkbuster.menu" }
+ loadMenu { "ui/createserver.menu" }
+ loadMenu { "ui/mod.menu" }
+ loadMenu { "ui/credit.menu" }
+ loadMenu { "ui/connect.menu" }
+ loadMenu { "ui/password.menu" }
+ loadMenu { "ui/quit.menu" }
+ loadMenu { "ui/addfilter.menu" }
+ loadMenu { "ui/error.menu" }
+ loadMenu { "ui/serverinfo.menu" }
+ loadMenu { "ui/findplayer.menu" }
+ loadMenu { "ui/quitcredit.menu" }
+ loadMenu { "ui/createfavorite.menu" }
+}
diff --git a/tremulous_ui/mod.menu b/tremulous_ui/mod.menu
new file mode 100644
index 00000000..51c62314
--- /dev/null
+++ b/tremulous_ui/mod.menu
@@ -0,0 +1,106 @@
+#include "ui/menudef.h"
+
+{
+ \\ MOD \\
+
+ menuDef
+ {
+ name "mod"
+ visible 0
+ fullscreen 0
+ rect 160 120 320 240
+ focusColor 1 .75 0 1
+ style 1
+ border 1
+ popup
+ onEsc
+ {
+ close mod;
+ open main
+ }
+ onOpen
+ {
+ uiScript loadMods
+ }
+
+ itemDef
+ {
+ name window
+ rect 0 0 320 240
+ style WINDOW_STYLE_FILLED
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+
+ border WINDOW_BORDER_FULL
+ borderSize 1.0
+ borderColor 0.5 0.5 0.5 1
+ }
+
+ itemDef
+ {
+ name modlist
+ rect 10 10 300 200
+ type ITEM_TYPE_LISTBOX
+ style WINDOW_STYLE_EMPTY
+ elementwidth 120
+ elementheight 20
+ textscale .25
+ elementtype LISTBOX_TEXT
+ feeder FEEDER_MODS
+ textalign 3
+ textaligny 14
+ border 1
+ bordercolor 0.5 0.5 0.5 0.5
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ outlinecolor 0.1 0.1 0.1 0.5
+ visible 1
+ doubleClick
+ {
+ play "sound/misc/menu1.wav";
+ uiScript RunMod
+ }
+ }
+
+ itemDef
+ {
+ name ok
+ text "OK"
+ type 1
+ textscale .25
+ rect 250 210 30 26
+ textalign 1
+ textalignx 15
+ textaligny 20
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ close mod;
+ uiScript RunMod
+ }
+ }
+
+ itemDef
+ {
+ name cancel
+ text "Cancel"
+ type 1
+ textscale .25
+ rect 280 210 30 26
+ textalign 1
+ textalignx 15
+ textaligny 20
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu3.wav";
+ close mod;
+ open main
+ }
+ }
+ }
+}
diff --git a/tremulous_ui/password.menu b/tremulous_ui/password.menu
new file mode 100644
index 00000000..e4b8b3ec
--- /dev/null
+++ b/tremulous_ui/password.menu
@@ -0,0 +1,92 @@
+#include "ui/menudef.h"
+
+{
+ \\ PASSWORD POPUP MENU \\
+
+ menuDef
+ {
+ name "password_popmenu"
+ visible 0
+ fullscreen 0
+ rect 204 122 235 235
+ focusColor 1 .75 0 1
+ style 1
+ border 1
+ popup
+ onESC
+ {
+ close password_popmenu;
+ open joinserver
+ }
+
+ itemDef
+ {
+ name window
+ rect 47 47 144 144
+ style WINDOW_STYLE_FILLED
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+
+ border WINDOW_BORDER_FULL
+ borderSize 1.0
+ borderColor 0.5 0.5 0.5 1
+ }
+
+ // PASSWORD //
+
+ itemDef
+ {
+ name password
+ text "Password"
+ style 0
+ decoration
+ textscale .3
+ rect 0 86 110 20
+ textalign 1
+ textalignx 117
+ textaligny 16
+ forecolor 1 1 1 1
+ visible 1
+ }
+
+ itemDef
+ {
+ name passwordEntry
+ style 1
+ text ""
+ maxchars 15
+ textscale .25
+ TYPE 4
+ cvar "password"
+ rect 60 106 120 20
+ textalign ITEM_ALIGN_LEFT
+ textalignx 10
+ textaligny 16
+ forecolor 1 1 1 1
+ backcolor .2 .2 .2 .5
+ visible 1
+ }
+
+ itemDef
+ {
+ name yes
+ text "OK"
+ type 1
+ textscale .25
+ style WINDOW_STYLE_EMPTY
+ rect 103 140 30 26
+ textalign 1
+ textalignx 15
+ textaligny 20
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ close password_popmenu;
+ open joinserver
+ }
+ }
+ }
+}
diff --git a/tremulous_ui/ptrc.menu b/tremulous_ui/ptrc.menu
new file mode 100644
index 00000000..d40e1972
--- /dev/null
+++ b/tremulous_ui/ptrc.menu
@@ -0,0 +1,111 @@
+#include "ui/menudef.h"
+
+{
+ // PTRC POPUP MENU //
+
+ menuDef
+ {
+ name "ptrc_popmenu"
+ visible 0
+ fullscreen 0
+ rect 140 170 360 140
+ focusColor 1 .75 0 1
+ style 1
+ border 1
+ popup
+ onESC
+ {
+ play "sound/misc/menu1.wav";
+ close ptrc_popmenu
+ }
+
+
+ itemDef
+ {
+ name window
+ rect 0 0 360 140
+ style WINDOW_STYLE_FILLED
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+
+ border WINDOW_BORDER_FULL
+ borderSize 1.0
+ borderColor 0.5 0.5 0.5 1
+ }
+
+
+ // PTRC //
+
+ itemDef
+ {
+ name confirm
+ text "It seems that you disconnected during this game."
+ style 0
+ textscale .4
+ textstyle 3
+ rect 180 40 0 0
+ textalign ITEM_ALIGN_CENTER
+ decoration
+ forecolor 1 1 1 1
+ visible 1
+ }
+
+ itemDef
+ {
+ name confirm
+ text "Would you like to be restored to your previous state?"
+ style 0
+ textscale .4
+ textstyle 3
+ rect 180 65 0 0
+ textalign ITEM_ALIGN_CENTER
+ decoration
+ forecolor 1 1 1 1
+ visible 1
+ }
+
+
+ itemDef
+ {
+ name yes
+ text "YES"
+ type 1
+ textscale .25
+ rect 80 96 20 20
+ textalign ITEM_ALIGN_CENTER
+ textalignx 10
+ textaligny 14
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu4.wav";
+ uiScript PTRCRestore;
+ close ptrc_popmenu
+ }
+ }
+
+
+ itemDef
+ {
+ name no
+ text "NO"
+ type 1
+ textscale .25
+ rect 260 96 20 20
+ textalign ITEM_ALIGN_CENTER
+ textalignx 10
+ textaligny 14
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ close ptrc_popmenu
+ }
+ }
+ }
+}
+
+
diff --git a/tremulous_ui/punkbuster.menu b/tremulous_ui/punkbuster.menu
new file mode 100644
index 00000000..acd36949
--- /dev/null
+++ b/tremulous_ui/punkbuster.menu
@@ -0,0 +1,292 @@
+#include "ui/menudef.h"
+
+{
+
+ // PB enable ----------------
+
+ menuDef
+ {
+ name "pbenable_popmenu"
+ visible 0
+ fullscreen 0
+ rect 204 122 235 235
+ focusColor 1 .75 0 1
+ style 1
+ border 1
+ popup
+ onESC
+ {
+ close pbenable_popmenu;
+ open joinserver
+ }
+
+ itemDef
+ {
+ name window
+ rect 47 47 144 144
+ style WINDOW_STYLE_FILLED
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+
+ border WINDOW_BORDER_FULL
+ borderSize 1.0
+ borderColor 0.5 0.5 0.5 1
+ }
+
+ itemDef
+ {
+ name confirm
+ text "Enable Punkbuster?"
+ style 0
+ textscale .25
+ textstyle 3
+ rect 0 85 110 20
+ textalign 1
+ textalignx 120
+ textaligny 15
+ decoration
+ forecolor 1 1 1 1
+ visible 1
+ }
+
+ // yes/no button
+
+ itemDef
+ {
+ name yes
+ text "YES"
+ type 1
+ textscale .25
+ rect 75 140 30 26
+ textalign 1
+ textalignx 18
+ textaligny 20
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript setPbClStatus 1;
+ close pbenable_popmenu;
+ open joinserver
+ }
+ }
+
+ itemDef
+ {
+ name no
+ text "NO"
+ type 1
+ textscale .25
+ rect 128 140 30 26
+ textalign 1
+ textalignx 18
+ textaligny 20
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu4.wav";
+ close pbenable_popmenu;
+ open joinserver
+ }
+ }
+ }
+
+ // PB disable ---------------
+
+ menuDef
+ {
+ name "pbdisable_popmenu"
+ visible 0
+ fullscreen 0
+ rect 204 122 235 235
+ focusColor 1 .75 0 1
+ style 1
+ border 1
+ popup
+ onESC
+ {
+ close pbdisable_popmenu;
+ open joinserver
+ }
+
+ itemDef
+ {
+ name window
+ rect 47 47 144 144
+ style WINDOW_STYLE_FILLED
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+
+ border WINDOW_BORDER_FULL
+ borderSize 1.0
+ borderColor 0.5 0.5 0.5 1
+ }
+
+ itemDef
+ {
+ name confirm
+ text "Disable Punkbuster?"
+ style 0
+ textscale .25
+ textstyle 3
+ rect 0 85 110 20
+ textalign 1
+ textalignx 120
+ textaligny 15
+ decoration
+ forecolor 1 1 1 1
+ visible 1
+ }
+
+ // yes/no button
+
+ itemDef
+ {
+ name yes
+ text "YES"
+ type 1
+ textscale .25
+ rect 75 140 30 26
+ textalign 1
+ textalignx 18
+ textaligny 20
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ close pbdisable_popmenu;
+ open pbmsg_popmenu
+ }
+ }
+
+ itemDef
+ {
+ name no
+ text "NO"
+ type 1
+ textscale .25
+ rect 128 140 30 26
+ textalign 1
+ textalignx 18
+ textaligny 20
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu4.wav";
+ close pbdisable_popmenu;
+ open joinserver
+ }
+ }
+ }
+
+ // disable msg --------------
+
+ menuDef
+ {
+ name "pbmsg_popmenu"
+ visible 0
+ fullscreen 0
+ rect 204 122 235 235
+ focusColor 1 .75 0 1
+ style 1
+ border 1
+ popup
+ onESC
+ {
+ play "sound/misc/menu4.wav";
+ close pbmsg_popmenu;
+ open joinserver
+ }
+
+ itemDef
+ {
+ name window
+ rect 47 47 144 144
+ style WINDOW_STYLE_FILLED
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+
+ border WINDOW_BORDER_FULL
+ borderSize 1.0
+ borderColor 0.5 0.5 0.5 1
+ }
+
+ itemDef
+ {
+ name confirm
+ text "PunkBuster will be disabled"
+ style 0
+ textscale .25
+ textstyle 3
+ rect 0 85 110 20
+ textalign 1
+ textalignx 120
+ textaligny 15
+ decoration
+ forecolor 1 1 1 1
+ visible 1
+ }
+
+ itemDef
+ {
+ name confirm
+ text "next time you start"
+ style 0
+ textscale .25
+ textstyle 3
+ rect 0 100 110 20
+ textalign 1
+ textalignx 120
+ textaligny 15
+ decoration
+ forecolor 1 1 1 1
+ visible 1
+ }
+
+ itemDef
+ {
+ name confirm
+ text "Tremulous"
+ style 0
+ textscale .25
+ textstyle 3
+ rect 0 115 110 20
+ textalign 1
+ textalignx 120
+ textaligny 15
+ decoration
+ forecolor 1 1 1 1
+ visible 1
+ }
+
+ // ok button
+
+ itemDef
+ {
+ name yes
+ text "OK"
+ type 1
+ textscale .25
+ rect 103 158 30 26
+ textalign 1
+ textalignx 18
+ textaligny 20
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript setPbClStatus 0;
+ close pbmsg_popmenu;
+ open joinserver
+ }
+ }
+ }
+}
diff --git a/tremulous_ui/quit.menu b/tremulous_ui/quit.menu
new file mode 100644
index 00000000..dede2585
--- /dev/null
+++ b/tremulous_ui/quit.menu
@@ -0,0 +1,102 @@
+#include "ui/menudef.h"
+
+{
+ \\ QUIT POPUP MENU \\
+
+ menuDef
+ {
+ name "quit_popmenu"
+ visible 0
+ fullscreen 0
+ rect 204 122 235 235
+ focusColor 1 .75 0 1
+ style 1
+ border 1
+ popup
+ onESC
+ {
+ play "sound/misc/menu1.wav";
+ close quit_popmenu;
+ open main
+ }
+
+
+ itemDef
+ {
+ name window
+ rect 47 47 144 144
+ style WINDOW_STYLE_FILLED
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+
+ border WINDOW_BORDER_FULL
+ borderSize 1.0
+ borderColor 0.5 0.5 0.5 1
+ }
+
+
+ // QUIT //
+
+ itemDef
+ {
+ name confirm
+ text "Quit Tremulous?"
+ style 0
+ textscale .3
+ textstyle 3
+ rect 0 90 110 20
+ textalign 1
+ textalignx 117
+ textaligny 16
+ decoration
+ forecolor 1 1 1 1
+ visible 1
+ }
+
+
+ itemDef
+ {
+ name yes
+ text "YES"
+ type 1
+ textscale .25
+ rect 75 120 30 26
+ textalign 1
+ textalignx 15
+ textaligny 20
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu4.wav";
+ close main;
+ close quit_popmenu;
+ open quitCredit
+ }
+ }
+
+
+ itemDef
+ {
+ name no
+ text "NO"
+ type 1
+ textscale .25
+ rect 128 120 30 26
+ textalign 1
+ textalignx 15
+ textaligny 20
+ forecolor 1 1 1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ close quit_popmenu;
+ open main
+ }
+ }
+ }
+}
+
+
diff --git a/tremulous_ui/quitcredit.menu b/tremulous_ui/quitcredit.menu
new file mode 100644
index 00000000..390daa60
--- /dev/null
+++ b/tremulous_ui/quitcredit.menu
@@ -0,0 +1,431 @@
+#include "ui/menudef.h"
+
+{
+ \\ QUIT CREDIT \\
+
+ menuDef
+ {
+ name "quitCredit"
+ visible 0
+ fullscreen 1
+ rect 0 0 640 480
+ focusColor 1 .75 0 1
+ style 1
+ border 0
+ onEsc
+ {
+ uiScript "quit"
+ }
+
+ itemDef
+ {
+ name exitclickbox
+ style WINDOW_STYLE_SHADER
+ rect 0 0 640 480
+ type ITEM_TYPE_BUTTON
+ visible 1
+ backcolor 0 0 0 1
+ background "ui/assets/credits_splash.jpg"
+ action
+ {
+ play "sound/misc/nomenu.wav";
+ close quitCredit;
+ uiScript "quit"
+ }
+ }
+
+ itemDef
+ {
+ name topstripe
+ style WINDOW_STYLE_FILLED
+ rect -5 -5 645 64
+ visible 1
+ backcolor 0 0 0 1
+
+ border WINDOW_BORDER_FULL
+ borderSize 1.5
+ borderColor 1 0 0 1
+ }
+
+ itemDef
+ {
+ name bottomstripe
+ style WINDOW_STYLE_FILLED
+ rect -5 416 645 485
+ visible 1
+ backcolor 0 0 0 1
+
+ border WINDOW_BORDER_FULL
+ borderSize 1.5
+ borderColor 1 0 0 1
+ }
+
+ itemDef
+ {
+ name "creditstitle"
+ group grpidcredit
+ style WINDOW_STYLE_EMPTY
+ rect 320 48 1 1
+ textalign ITEM_ALIGN_CENTER
+ textalignx 0
+ textaligny 0
+ textscale 0.75
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ text "CREDITS"
+ forecolor 1 1 1 1
+ backcolor 1 0 0 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name "credit1left"
+ group grpidcredit
+ style WINDOW_STYLE_EMPTY
+ rect 10 96 1 1
+ textalign ITEM_ALIGN_LEFT
+ textalignx 0
+ textaligny 10
+ textscale 0.50
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ text "Tim 'Timbo' Angus"
+ forecolor 1 1 1 1
+ backcolor 1 0 0 1
+ visible 1
+ decoration
+ }
+ itemDef
+ {
+ name "credit1right"
+ group grpidcredit
+ style WINDOW_STYLE_EMPTY
+ rect 630 96 1 1
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 0
+ textaligny 10
+ textscale 0.50
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ text "Programming and Direction"
+ forecolor 1 1 1 1
+ backcolor 0 1 0 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name "credit2left"
+ group grpidcredit
+ style WINDOW_STYLE_EMPTY
+ rect 10 128 1 1
+ textalign ITEM_ALIGN_LEFT
+ textalignx 0
+ textaligny 10
+ textscale 0.50
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ text "Nick 'jex' Jansens"
+ forecolor 1 1 1 1
+ backcolor 1 0 0 1
+ visible 1
+ decoration
+ }
+ itemDef
+ {
+ name "credit2right"
+ group grpidcredit
+ style WINDOW_STYLE_EMPTY
+ rect 630 128 1 1
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 0
+ textaligny 10
+ textscale 0.50
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ text "Mapping, texturing and 2D artwork"
+ forecolor 1 1 1 1
+ backcolor 0 1 0 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name "credit3left"
+ group grpidcredit
+ style WINDOW_STYLE_EMPTY
+ rect 10 160 1 1
+ textalign ITEM_ALIGN_LEFT
+ textalignx 0
+ textaligny 10
+ textscale 0.50
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ text "Robin 'OverFlow' Marshall"
+ forecolor 1 1 1 1
+ backcolor 1 0 0 1
+ visible 1
+ decoration
+ }
+ itemDef
+ {
+ name "credit3right"
+ group grpidcredit
+ style WINDOW_STYLE_EMPTY
+ rect 630 160 1 1
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 0
+ textaligny 10
+ textscale 0.50
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ text "Modelling, animation and mapping"
+ forecolor 1 1 1 1
+ backcolor 0 1 0 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name "credit4left"
+ group grpidcredit
+ style WINDOW_STYLE_EMPTY
+ rect 10 192 1 1
+ textalign ITEM_ALIGN_LEFT
+ textalignx 0
+ textaligny 10
+ textscale 0.50
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ text "Jan 'Stannum' van der Weg"
+ forecolor 1 1 1 1
+ backcolor 1 0 0 1
+ visible 1
+ decoration
+ }
+ itemDef
+ {
+ name "credit4right"
+ group grpidcredit
+ style WINDOW_STYLE_EMPTY
+ rect 630 192 1 1
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 0
+ textaligny 10
+ textscale 0.50
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ text "Texturing and mapping"
+ forecolor 1 1 1 1
+ backcolor 0 1 0 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name "credit5left"
+ group grpidcredit
+ style WINDOW_STYLE_EMPTY
+ rect 10 224 1 1
+ textalign ITEM_ALIGN_LEFT
+ textalignx 0
+ textaligny 10
+ textscale 0.50
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ text "Mike 'Veda' McInnerney"
+ forecolor 1 1 1 1
+ backcolor 1 0 0 1
+ visible 1
+ decoration
+ }
+ itemDef
+ {
+ name "credit5right"
+ group grpidcredit
+ style WINDOW_STYLE_EMPTY
+ rect 630 224 1 1
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 0
+ textaligny 10
+ textscale 0.50
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ text "Modelling, animation and texturing"
+ forecolor 1 1 1 1
+ backcolor 0 1 0 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name "credit6left"
+ group grpidcredit
+ style WINDOW_STYLE_EMPTY
+ rect 10 256 1 1
+ textalign ITEM_ALIGN_LEFT
+ textalignx 0
+ textaligny 10
+ textscale 0.50
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ text "Gordon 'Godmil' Miller"
+ forecolor 1 1 1 1
+ backcolor 1 0 0 1
+ visible 1
+ decoration
+ }
+ itemDef
+ {
+ name "credit6right"
+ group grpidcredit
+ style WINDOW_STYLE_EMPTY
+ rect 630 256 1 1
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 0
+ textaligny 10
+ textscale 0.50
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ text "Mapping"
+ forecolor 1 1 1 1
+ backcolor 0 1 0 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name "credit7left"
+ group grpidcredit
+ style WINDOW_STYLE_EMPTY
+ rect 10 288 1 1
+ textalign ITEM_ALIGN_LEFT
+ textalignx 0
+ textaligny 10
+ textscale 0.50
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ text "'Who-[Soup]'"
+ forecolor 1 1 1 1
+ backcolor 1 0 0 1
+ visible 1
+ decoration
+ }
+ itemDef
+ {
+ name "credit7right"
+ group grpidcredit
+ style WINDOW_STYLE_EMPTY
+ rect 630 288 1 1
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 0
+ textaligny 10
+ textscale 0.50
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ text "Mapping"
+ forecolor 1 1 1 1
+ backcolor 0 1 0 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name "credit8left"
+ group grpidcredit
+ style WINDOW_STYLE_EMPTY
+ rect 10 320 1 1
+ textalign ITEM_ALIGN_LEFT
+ textalignx 0
+ textaligny 10
+ textscale 0.50
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ text "Tristan 'jhrx' Blease"
+ forecolor 1 1 1 1
+ backcolor 1 0 0 1
+ visible 1
+ decoration
+ }
+ itemDef
+ {
+ name "credit8right"
+ group grpidcredit
+ style WINDOW_STYLE_EMPTY
+ rect 630 320 1 1
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 0
+ textaligny 10
+ textscale 0.50
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ text "Mapping"
+ forecolor 1 1 1 1
+ backcolor 0 1 0 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name "credit9left"
+ group grpidcredit
+ style WINDOW_STYLE_EMPTY
+ rect 10 352 1 1
+ textalign ITEM_ALIGN_LEFT
+ textalignx 0
+ textaligny 10
+ textscale 0.50
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ text "Paul 'MoP' Greveson"
+ forecolor 1 1 1 1
+ backcolor 1 0 0 1
+ visible 1
+ decoration
+ }
+ itemDef
+ {
+ name "credit9right"
+ group grpidcredit
+ style WINDOW_STYLE_EMPTY
+ rect 630 352 1 1
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 0
+ textaligny 10
+ textscale 0.50
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ text "Modelling and texturing"
+ forecolor 1 1 1 1
+ backcolor 0 1 0 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name "credit10left"
+ group grpidcredit
+ style WINDOW_STYLE_EMPTY
+ rect 10 384 1 1
+ textalign ITEM_ALIGN_LEFT
+ textalignx 0
+ textaligny 10
+ textscale 0.50
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ text "Chris 'Dolby' McCarthy"
+ forecolor 1 1 1 1
+ backcolor 1 0 0 1
+ visible 1
+ decoration
+ }
+ itemDef
+ {
+ name "credit10right"
+ group grpidcredit
+ style WINDOW_STYLE_EMPTY
+ rect 630 384 1 1
+ textalign ITEM_ALIGN_RIGHT
+ textalignx 0
+ textaligny 10
+ textscale 0.50
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ text "Sound"
+ forecolor 1 1 1 1
+ backcolor 0 1 0 1
+ visible 1
+ decoration
+ }
+ }
+}
diff --git a/tremulous_ui/serverinfo.menu b/tremulous_ui/serverinfo.menu
new file mode 100644
index 00000000..2282c888
--- /dev/null
+++ b/tremulous_ui/serverinfo.menu
@@ -0,0 +1,143 @@
+#include "ui/menudef.h"
+
+{
+ \\ SERVER INFO POPUP MENU \\
+
+ menuDef
+ {
+ name "serverinfo_popmenu"
+ visible 0
+ fullscreen 0
+ rect 158 80 320 340
+ focusColor 1 .75 0 1
+ style 1
+ border 1
+ popup
+ onClose { }
+ onOpen { uiScript ServerStatus }
+ onESC
+ {
+ close serverinfo_popmenu;
+ open joinserver
+ }
+
+ itemDef
+ {
+ name window
+ rect 10 15 300 320
+ style 1
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+
+ border WINDOW_BORDER_FULL
+ borderSize 1.0
+ borderColor 0.5 0.5 0.5 1
+ }
+
+ itemDef
+ {
+ name serverinfo
+ rect 0 20 320 20
+ text "Server Information"
+ textstyle 3
+ textalign 1
+ textscale .333
+ textalignx 160
+ textaligny 20
+ forecolor 1 1 1 1
+ visible 1
+ decoration
+ }
+
+
+ itemDef
+ {
+ name serverinfo
+ rect 20 55 280 230
+ type ITEM_TYPE_LISTBOX
+ style WINDOW_STYLE_FILLED
+ elementwidth 120
+ elementheight 16
+ textscale .225
+ backcolor 0 0 0 1
+ border 1
+ bordersize 1
+ bordercolor .5 .5 .5 1
+ elementtype LISTBOX_TEXT
+ feeder FEEDER_SERVERSTATUS
+ notselectable
+ visible 1
+ columns 4
+ 2 40 20 ITEM_ALIGN_LEFT
+ 40 40 10 ITEM_ALIGN_LEFT
+ 90 40 10 ITEM_ALIGN_LEFT
+ 135 40 20 ITEM_ALIGN_LEFT
+ }
+
+ itemDef
+ {
+ name window
+ rect 20 55 264 230
+ style 1
+ backcolor 0 0 0 0
+ forecolor 0 0 0 0
+ border 1
+ bordersize 1
+ bordercolor .5 .5 .5 1
+ visible 1
+ decoration
+ }
+
+ // BUTTON //
+
+ itemDef
+ {
+ name exit
+ text "Exit"
+ type 1
+ textscale .23
+ group grpControlbutton
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ rect 95 295 45 26
+ textalign 1
+ textalignx 23
+ textaligny 20
+ forecolor 1 1 1 1
+ backcolor .37 .1 .1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ close serverinfo_popmenu;
+ open joinserver
+ }
+ }
+
+ itemDef
+ {
+ name refresh
+ text "Refresh"
+ type 1
+ textscale .23
+ group grpControlbutton
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ rect 180 295 45 26
+ textalign 1
+ textalignx 23
+ textaligny 20
+ forecolor 1 1 1 1
+ backcolor .37 .1 .1 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript ServerStatus
+ }
+ }
+ }
+}
+
+
diff --git a/tremulous_ui/teamscore.menu b/tremulous_ui/teamscore.menu
new file mode 100644
index 00000000..9d98fe45
--- /dev/null
+++ b/tremulous_ui/teamscore.menu
@@ -0,0 +1,286 @@
+#include "ui/menudef.h"
+
+{
+ \\ score_menu \\
+
+ menuDef
+ {
+ name "teamscore_menu"
+ visible 0
+ fullscreen 0
+ rect 0 0 640 480
+ focusColor 1 .75 0 1
+ style 0
+ border 1
+
+
+ // GAMETYPE BAR //
+
+ // TEAM NAME //
+
+ itemDef
+ {
+ name teamNameWindow
+ rect 14 78 612 30
+ style WINDOW_STYLE_FILLED
+ border 1
+ bordercolor .5 .5 .5 1
+ forecolor 1 1 1 1
+ backcolor 0 0 0 .5
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name alienteamname
+ text "Aliens"
+ textalign ITEM_ALIGN_LEFT
+ textscale .5
+ textaligny 26
+ rect 20 78 306 23
+ forecolor 1 1 1 1
+ decoration
+ visible 1
+ }
+
+ itemDef
+ {
+ name stagereport
+ align ITEM_ALIGN_CENTER
+ textscale 0.4
+ textaligny 24
+ rect 14 78 612 23
+ forecolor 1 1 1 1
+ decoration
+ visible 1
+ ownerdraw CG_STAGE_REPORT_TEXT
+ }
+
+ itemDef
+ {
+ name humanteamname
+ text "Humans"
+ textalign ITEM_ALIGN_RIGHT
+ textscale .5
+ textaligny 26
+ rect 620 78 0 23
+ forecolor 1 1 1 1
+ decoration
+ visible 1
+ }
+
+ // TEAM BARS //
+
+ itemDef
+ {
+ name leftteambar
+ rect 14 112 307 25
+ style WINDOW_STYLE_FILLED
+ border 1
+ bordercolor .5 .5 .5 1
+ forecolor 1 1 1 1
+ backcolor 0 0 0 .5
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name rightteambar
+ rect 320 112 306 25
+ style WINDOW_STYLE_FILLED
+ border 1
+ bordercolor .5 .5 .5 1
+ forecolor 1 1 1 1
+ backcolor 0 0 0 .5
+ visible 1
+ decoration
+ }
+
+
+ // TEAM HEADINGS //
+
+ itemDef
+ {
+ name leftteamheadings
+ text "Status Name Kills Time Ping"
+ textscale .25
+ style 0
+ rect 25 112 128 30
+ textalign 0
+ textalignx 0 // x alignment point for text
+ // use it to offset left/right text from the edge
+ // or to center the text on a different point
+ textaligny 18
+ backcolor 0 0 0 0
+ forecolor 1 .75 0 1
+ decoration
+ visible 1
+ }
+
+ itemDef
+ {
+ name rightteamheadings
+ text "Status Name Kills Time Ping"
+ textscale .25
+ style 0
+ rect 331 112 128 30
+ textalign 0
+ textalignx 0 // x alignment point for text
+ // use it to offset left/right text from the edge
+ // or to center the text on a different point
+ textaligny 18
+ backcolor 0 0 0 0
+ forecolor 1 .75 0 1
+ decoration
+ visible 1
+ }
+
+
+ // GRADIENT BACKGROUNDS //
+
+ itemDef
+ {
+ name window
+ rect 320 142 1 220
+ style WINDOW_STYLE_FILLED
+ border 1
+ bordercolor .5 .5 .5 1
+ forecolor 1 1 1 1
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name window
+ rect 300 142 1 220
+ style WINDOW_STYLE_FILLED
+ border 1
+ bordercolor .5 .5 .5 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name window
+ rect 606 142 1 220
+ style WINDOW_STYLE_FILLED
+ border 1
+ bordercolor .5 .5 .5 1
+ visible 1
+ decoration
+ }
+
+
+ // LIST //
+
+ itemDef
+ {
+ name leftlist
+ rect 14 142 306 222
+ forecolor .75 .75 .75 1
+ visible 1
+ type ITEM_TYPE_LISTBOX
+ elementwidth 135
+ elementheight 20
+ textscale .25
+ elementtype LISTBOX_TEXT
+ feeder FEEDER_ALIENTEAM_LIST
+ notselectable
+ columns 7
+ 5 15 1 ITEM_ALIGN_LEFT
+ 21 15 1 ITEM_ALIGN_LEFT
+ 7 30 5 ITEM_ALIGN_LEFT
+ 45 100 24 ITEM_ALIGN_LEFT
+ 172 20 4 ITEM_ALIGN_RIGHT
+ 209 20 4 ITEM_ALIGN_RIGHT
+ 247 20 4 ITEM_ALIGN_RIGHT
+ }
+
+ itemDef
+ {
+ name rightlist
+ rect 320 142 306 222
+ forecolor 1 1 1 1
+ visible 1
+ type ITEM_TYPE_LISTBOX
+ elementwidth 135
+ elementheight 20
+ textscale .25
+ elementtype LISTBOX_TEXT
+ feeder FEEDER_HUMANTEAM_LIST
+ notselectable
+ columns 7
+ 5 15 1 ITEM_ALIGN_LEFT
+ 21 15 1 ITEM_ALIGN_LEFT
+ 7 30 5 ITEM_ALIGN_LEFT
+ 45 100 24 ITEM_ALIGN_LEFT
+ 172 20 4 ITEM_ALIGN_RIGHT
+ 209 20 4 ITEM_ALIGN_RIGHT
+ 247 20 4 ITEM_ALIGN_RIGHT
+ }
+
+
+ // PLAYER LIST BORDER //
+
+ itemDef
+ {
+ name window
+ rect 14 141 612 221
+ style WINDOW_STYLE_EMPTY
+ border 1
+ bordercolor .5 .5 .5 1
+ forecolor 1 1 1 1
+ backcolor 0 0 0 .5
+ visible 1
+ decoration
+ }
+
+
+ // spectators //
+
+ itemDef
+ {
+ name window
+ rect 14 366 612 24
+ style WINDOW_STYLE_FILLED
+ border 1
+ bordercolor .5 .5 .5 1
+ forecolor 1 1 1 .7
+ backcolor 0 0 0 .5
+ textscale .33
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name window
+ text "Spectating:"
+ textaligny 20
+ rect 19 366 82 24
+ style WINDOW_STYLE_FILLED
+ forecolor 1 1 1 1
+ textscale .33
+ textalignx 3
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name window
+ rect 100 366 520 24
+ style WINDOW_STYLE_FILLED
+ forecolor 1 1 1 1
+ textscale .33
+ visible 1
+ ownerdraw CG_SPECTATORS
+ decoration
+ }
+ }
+}
diff --git a/tremulous_ui/tremulous.txt b/tremulous_ui/tremulous.txt
new file mode 100644
index 00000000..ca23045a
--- /dev/null
+++ b/tremulous_ui/tremulous.txt
@@ -0,0 +1,19 @@
+// menu defs
+//
+{
+ loadMenu { "ui/tremulous_teamselect.menu" }
+ loadMenu { "ui/tremulous_alienclass.menu" }
+ loadMenu { "ui/tremulous_humanitem.menu" }
+
+ loadMenu { "ui/tremulous_alienbuild.menu" }
+ loadMenu { "ui/tremulous_humanbuild.menu" }
+
+ loadMenu { "ui/tremulous_humanarmoury.menu" }
+
+ loadMenu { "ui/tremulous_humandialogs.menu" }
+ loadMenu { "ui/tremulous_aliendialogs.menu" }
+
+ loadMenu { "ui/tremulous_alienupgrade.menu" }
+
+ loadMenu { "ui/ptrc.menu" }
+}
diff --git a/tremulous_ui/tremulous_alien_builder_hud.menu b/tremulous_ui/tremulous_alien_builder_hud.menu
new file mode 100644
index 00000000..8a5b5860
--- /dev/null
+++ b/tremulous_ui/tremulous_alien_builder_hud.menu
@@ -0,0 +1,307 @@
+#include "ui/menudef.h"
+
+// team menu
+//
+// defines from ui_shared.h
+
+{
+ menuDef
+ {
+ name "alien_builder_hud"
+ fullScreen MENU_FALSE
+ visible MENU_TRUE
+ rect 0 0 640 480
+
+ //CONSOLE
+ itemDef
+ {
+ name "console"
+ rect 8 8 560 180
+ style WINDOW_STYLE_EMPTY
+ visible 1
+ decoration
+ forecolor 1 1 1 1
+ align ITEM_ALIGN_LEFT
+ textalignx 0
+ textaligny 18
+ textscale 0.4
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ ownerdraw CG_CONSOLE
+ }
+
+ //LAGOMETER
+ itemDef
+ {
+ name "lagometer"
+ rect 596 68 32 20
+ style WINDOW_STYLE_EMPTY
+ visible 1
+ decoration
+ forecolor 1 0 0 1
+ textscale 0.3
+ textalignx 1
+ textaligny 0.5
+ ownerdraw CG_LAGOMETER
+ }
+
+ //SELECT
+ itemDef
+ {
+ name "select"
+ rect 240 435 160 32
+ visible 0
+ decoration
+ ownerdraw CG_PLAYER_SELECT
+ }
+
+ //////////////////
+ //STATIC OBJECTS//
+ //////////////////
+
+ //LEFT RING CIRCLE
+ itemDef
+ {
+ name "left-ring-circle"
+ rect 47.5 410 25 25
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 0.25
+ style WINDOW_STYLE_SHADER
+ background "ui/assets/neutral/circle.tga"
+ }
+
+ //LEFT ARM
+ itemDef
+ {
+ name "left-arm"
+ rect 77 404.75 104 52.5
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 0.25
+ style WINDOW_STYLE_SHADER
+ background "ui/assets/alien/left-arm.tga"
+ }
+
+ //LEFT ARM CIRCLE
+ itemDef
+ {
+ name "left-arm-circle"
+ rect 150 417.5 25 25
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 0.25
+ style WINDOW_STYLE_SHADER
+ background "ui/assets/neutral/circle.tga"
+ }
+
+ //RIGHT RING CIRCLE
+ itemDef
+ {
+ name "right-ring-circle"
+ rect 567 410 25 25
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 0.25
+ style WINDOW_STYLE_SHADER
+ background "ui/assets/neutral/circle.tga"
+ }
+
+ //RIGHT ARM
+ itemDef
+ {
+ name "right-arm"
+ rect 459 404.75 104 52.5
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 0.25
+ style WINDOW_STYLE_SHADER
+ background "ui/assets/alien/right-arm.tga"
+ }
+
+ ///////////////////
+ //DYNAMIC OBJECTS//
+ ///////////////////
+
+ //BOLT
+ itemDef
+ {
+ name "bolt"
+ rect 52.5 412.5 15 20
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 0.5
+ background "ui/assets/alien/bolt.tga"
+ ownerdraw CG_PLAYER_BOOST_BOLT
+ }
+
+ //CROSS
+ itemDef
+ {
+ name "cross"
+ rect 155 422.5 15 15
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 0.5
+ style WINDOW_STYLE_SHADER
+ background "ui/assets/neutral/cross.tga"
+ }
+
+ //LEFT RING
+ itemDef
+ {
+ name "left-ring"
+ rect 7.25 369.5 90.5 106
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 0.5
+ background "ui/assets/alien/left-ring.tga"
+ ownerdraw CG_PLAYER_BOOSTED
+ }
+
+ //LEFT SPIKES
+ itemDef
+ {
+ name "left-spikes"
+ rect 18.5 381 59 83
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 1.0
+ background "ui/assets/alien/left-spikes.tga"
+ ownerdraw CG_PLAYER_WALLCLIMBING
+ }
+
+ //RIGHT RING
+ itemDef
+ {
+ name "right-ring"
+ rect 542.25 369.5 90.5 106
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 0.5
+ background "ui/assets/alien/right-ring.tga"
+ ownerdraw CG_PLAYER_BOOSTED
+ }
+
+ //RIGHT SPIKES
+ itemDef
+ {
+ name "right-spikes"
+ rect 562.5 381 59 83
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 1.0
+ background "ui/assets/alien/right-spikes.tga"
+ ownerdraw CG_PLAYER_WALLCLIMBING
+ }
+
+ //HEALTH
+ itemDef
+ {
+ name "health"
+ rect 78.5 421.5 60 15
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 .5
+ ownerdraw CG_PLAYER_HEALTH
+ }
+
+ //ALIEN CLASS ICON
+ itemDef
+ {
+ name "alien-icon"
+ rect 465 417.5 25 25
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 0.6
+ ownerdraw CG_PLAYER_WEAPONICON
+ }
+
+ //ORGANS
+ itemDef
+ {
+ name "organs"
+ rect 570.5 415.95 15 15
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 .5
+ ownerdraw CG_PLAYER_CREDITS_VALUE_NOPAD
+ }
+
+ //BUILD TIMER
+ itemDef
+ {
+ name "buildtimer"
+ rect 567 410 25 25
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 .5
+ ownerdraw CG_PLAYER_BUILD_TIMER
+ }
+
+ //BUILD POINTS
+ itemDef
+ {
+ name "build-points"
+ rect 483.5 421.5 60 15
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 .5
+ ownerdraw CG_PLAYER_AMMO_VALUE
+ }
+
+ //FPS
+ itemDef
+ {
+ name "fps"
+ rect 572 8 56 22
+ style WINDOW_STYLE_EMPTY
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 1
+ align ITEM_ALIGN_RIGHT
+ textalignx 0
+ textaligny 18
+ textscale 0.3
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ ownerdraw CG_FPS
+ }
+
+ //TIMER
+ itemDef
+ {
+ name "timer"
+ rect 572 38 56 22
+ style WINDOW_STYLE_EMPTY
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 1
+ align ITEM_ALIGN_RIGHT
+ textalignx 0
+ textaligny 18
+ textscale 0.3
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ ownerdraw CG_TIMER
+ }
+
+ //ALIENSENSE
+ itemDef
+ {
+ name "aliensense"
+ rect 20 20 600 400
+ visible 1
+ decoration
+ ownerdraw CG_PLAYER_ALIEN_SENSE
+ }
+
+ //PLAYER NAME
+ itemDef
+ {
+ name "playername"
+ rect 200 275 240 25
+ visible 1
+ decoration
+ textScale .5
+ ownerdraw CG_PLAYER_CROSSHAIRNAMES
+ }
+ }
+}
diff --git a/tremulous_ui/tremulous_alien_general_hud.menu b/tremulous_ui/tremulous_alien_general_hud.menu
new file mode 100644
index 00000000..078254fb
--- /dev/null
+++ b/tremulous_ui/tremulous_alien_general_hud.menu
@@ -0,0 +1,296 @@
+#include "ui/menudef.h"
+
+// team menu
+//
+// defines from ui_shared.h
+
+{
+ menuDef
+ {
+ name "alien_general_hud"
+ fullScreen MENU_FALSE
+ visible MENU_TRUE
+ rect 0 0 640 480
+
+ //CONSOLE
+ itemDef
+ {
+ name "console"
+ rect 8 8 560 180
+ style WINDOW_STYLE_EMPTY
+ visible 1
+ decoration
+ forecolor 1 1 1 1
+ align ITEM_ALIGN_LEFT
+ textalignx 0
+ textaligny 18
+ textscale 0.4
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ ownerdraw CG_CONSOLE
+ }
+
+ //LAGOMETER
+ itemDef
+ {
+ name "lagometer"
+ rect 596 68 32 20
+ style WINDOW_STYLE_EMPTY
+ visible 1
+ decoration
+ forecolor 1 0 0 1
+ textscale 0.3
+ textalignx 1
+ textaligny 0.5
+ ownerdraw CG_LAGOMETER
+ }
+
+ //SELECT
+ itemDef
+ {
+ name "select"
+ rect 240 435 160 32
+ visible 0
+ decoration
+ ownerdraw CG_PLAYER_SELECT
+ }
+
+ //////////////////
+ //STATIC OBJECTS//
+ //////////////////
+
+ //LEFT RING CIRCLE
+ itemDef
+ {
+ name "left-ring-circle"
+ rect 47.5 410 25 25
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 0.25
+ style WINDOW_STYLE_SHADER
+ background "ui/assets/neutral/circle.tga"
+ }
+
+ //LEFT ARM
+ itemDef
+ {
+ name "left-arm"
+ rect 77 404.75 104 52.5
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 0.25
+ style WINDOW_STYLE_SHADER
+ background "ui/assets/alien/left-arm.tga"
+ }
+
+ //LEFT ARM CIRCLE
+ itemDef
+ {
+ name "left-arm-circle"
+ rect 150 417.5 25 25
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 0.25
+ style WINDOW_STYLE_SHADER
+ background "ui/assets/neutral/circle.tga"
+ }
+
+ //RIGHT RING CIRCLE
+ itemDef
+ {
+ name "right-ring-circle"
+ rect 567 410 25 25
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 0.25
+ style WINDOW_STYLE_SHADER
+ background "ui/assets/neutral/circle.tga"
+ }
+
+ //RIGHT ARM
+ itemDef
+ {
+ name "right-arm"
+ rect 459 404.75 104 52.5
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 0.25
+ style WINDOW_STYLE_SHADER
+ background "ui/assets/alien/right-arm.tga"
+ }
+
+ ///////////////////
+ //DYNAMIC OBJECTS//
+ ///////////////////
+
+ //BLOB
+ itemDef
+ {
+ name "blob"
+ rect 479 419 57 18
+ visible 1
+ forecolor 1.0 0.0 0.0 0.5
+ background "ui/assets/alien/tremublob.tga"
+ ownerdraw CG_PLAYER_POISON_BARBS
+ }
+
+ //BOLT
+ itemDef
+ {
+ name "bolt"
+ rect 52.5 412.5 15 20
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 0.5
+ background "ui/assets/alien/bolt.tga"
+ ownerdraw CG_PLAYER_BOOST_BOLT
+ }
+
+ //CROSS
+ itemDef
+ {
+ name "cross"
+ rect 155 422.5 15 15
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 0.5
+ style WINDOW_STYLE_SHADER
+ background "ui/assets/neutral/cross.tga"
+ }
+
+ //LEFT RING
+ itemDef
+ {
+ name "left-ring"
+ rect 7.25 369.5 90.5 106
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 0.5
+ background "ui/assets/alien/left-ring.tga"
+ ownerdraw CG_PLAYER_BOOSTED
+ }
+
+ //LEFT SPIKES
+ itemDef
+ {
+ name "left-spikes"
+ rect 18.5 381 59 83
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 1.0
+ background "ui/assets/alien/left-spikes.tga"
+ ownerdraw CG_PLAYER_WALLCLIMBING
+ }
+
+ //RIGHT RING
+ itemDef
+ {
+ name "right-ring"
+ rect 542.25 369.5 90.5 106
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 0.5
+ background "ui/assets/alien/right-ring.tga"
+ ownerdraw CG_PLAYER_BOOSTED
+ }
+
+ //RIGHT SPIKES
+ itemDef
+ {
+ name "right-spikes"
+ rect 562.5 381 59 83
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 1.0
+ background "ui/assets/alien/right-spikes.tga"
+ ownerdraw CG_PLAYER_WALLCLIMBING
+ }
+
+ //HEALTH
+ itemDef
+ {
+ name "health"
+ rect 78.5 421.5 60 15
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 .5
+ ownerdraw CG_PLAYER_HEALTH
+ }
+
+ //ALIEN CLASS ICON
+ itemDef
+ {
+ name "alien-icon"
+ rect 465 417.5 25 25
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 0.6
+ ownerdraw CG_PLAYER_WEAPONICON
+ }
+
+ //ORGANS
+ itemDef
+ {
+ name "organs"
+ rect 570.5 415.95 15 15
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 .5
+ ownerdraw CG_PLAYER_CREDITS_VALUE_NOPAD
+ }
+
+ //FPS
+ itemDef
+ {
+ name "fps"
+ rect 572 8 56 22
+ style WINDOW_STYLE_EMPTY
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 1
+ align ITEM_ALIGN_RIGHT
+ textalignx 0
+ textaligny 18
+ textscale 0.3
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ ownerdraw CG_FPS
+ }
+
+ //TIMER
+ itemDef
+ {
+ name "timer"
+ rect 572 38 56 22
+ style WINDOW_STYLE_EMPTY
+ visible 1
+ decoration
+ forecolor 1.0 0.0 0.0 1
+ align ITEM_ALIGN_RIGHT
+ textalignx 0
+ textaligny 18
+ textscale 0.3
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ ownerdraw CG_TIMER
+ }
+
+ //ALIENSENSE
+ itemDef
+ {
+ name "aliensense"
+ rect 20 20 600 400
+ visible 1
+ decoration
+ ownerdraw CG_PLAYER_ALIEN_SENSE
+ }
+
+ //PLAYER NAME
+ itemDef
+ {
+ name "playername"
+ rect 200 275 240 25
+ visible 1
+ decoration
+ textScale .5
+ ownerdraw CG_PLAYER_CROSSHAIRNAMES
+ }
+ }
+}
diff --git a/tremulous_ui/tremulous_alienbuild.menu b/tremulous_ui/tremulous_alienbuild.menu
new file mode 100644
index 00000000..9676a85f
--- /dev/null
+++ b/tremulous_ui/tremulous_alienbuild.menu
@@ -0,0 +1,117 @@
+#include "ui/menudef.h"
+
+{
+ menuDef
+ {
+ name "tremulous_alienbuild"
+ visible 0
+ fullscreen 0
+ outOfBoundsClick
+ rect 112 111 400 247
+ focusColor 1 .75 0 1
+ style 1
+ popup
+ onOpen { uiScript LoadAlienBuilds; setFocus list }
+
+ itemDef
+ {
+ name window
+ rect 0 0 400 247
+ style WINDOW_STYLE_FILLED
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+
+ border WINDOW_BORDER_FULL
+ borderSize 1.0
+ borderColor 0.5 0.5 0.5 1
+ }
+
+ itemDef
+ {
+ name "list"
+ rect 8 8 136 231
+ type ITEM_TYPE_LISTBOX
+ style WINDOW_STYLE_EMPTY
+ elementwidth 120
+ elementheight 20
+ textscale .33
+ elementtype LISTBOX_TEXT
+ feeder FEEDER_TREMALIENBUILD
+ border 1
+ bordercolor 0.5 0.5 0.5 0.5
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ outlinecolor 0.1 0.1 0.1 0.5
+ visible 1
+ doubleclick
+ {
+ play "sound/misc/menu1.wav";
+ uiScript BuildAlienBuildable;
+ close tremulous_alienbuild
+ }
+ }
+
+ itemDef
+ {
+ name infopane
+ ownerdraw UI_ABUILDINFOPANE
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ style WINDOW_STYLE_EMPTY
+ rect 152 8 240 204
+ textscale .33
+ textalignx 6
+ textaligny 12
+ border 1
+ bordercolor 0.5 0.5 0.5 0.5
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ outlinecolor 0.1 0.1 0.1 0.5
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name "OKCancel"
+ text "OK"
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ rect 305 218 34 21
+ textalign ITEM_ALIGN_LEFT
+ textalignx 12.5
+ textaligny 18
+ textscale .4
+ forecolor 1 1 1 1
+ backcolor 0 0 0 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript BuildAlienBuildable;
+ close tremulous_alienbuild
+ }
+ }
+
+ itemDef
+ {
+ name "OKCancel"
+ text "Cancel"
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ rect 344 218 50 21
+ textalign ITEM_ALIGN_LEFT
+ textalignx 3.8
+ textaligny 18
+ textscale .4
+ forecolor 1 1 1 1
+ backcolor 0 0 0 1
+ visible 1
+ action
+ {
+ play "sound/misc/menu3.wav";
+ close tremulous_alienbuild
+ }
+ }
+ }
+}
diff --git a/tremulous_ui/tremulous_alienclass.menu b/tremulous_ui/tremulous_alienclass.menu
new file mode 100644
index 00000000..a3e01c51
--- /dev/null
+++ b/tremulous_ui/tremulous_alienclass.menu
@@ -0,0 +1,139 @@
+#include "ui/menudef.h"
+
+{
+ menuDef
+ {
+ name "tremulous_alienclass"
+ visible 1
+ fullscreen 0
+ outOfBoundsClick
+ rect 112 111 400 247
+ focusColor 1 .75 0 1
+ style 1
+ popup
+ onOpen { uiScript LoadAlienClasses; setFocus list }
+
+ itemDef
+ {
+ name window
+ rect 0 0 400 247
+ style WINDOW_STYLE_FILLED
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+
+ border WINDOW_BORDER_FULL
+ borderSize 1.0
+ borderColor 0.5 0.5 0.5 1
+ }
+
+ itemDef
+ {
+ name "list"
+ rect 8 8 136 231
+ type ITEM_TYPE_LISTBOX
+ style WINDOW_STYLE_EMPTY
+ elementwidth 120
+ elementheight 20
+ textscale .33
+ elementtype LISTBOX_TEXT
+ feeder FEEDER_TREMALIENCLASSES
+ border 1
+ bordercolor 0.5 0.5 0.5 0.5
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ outlinecolor 0.1 0.1 0.1 0.5
+ visible 1
+ doubleclick
+ {
+ play "sound/misc/menu1.wav";
+ uiScript SpawnAsAlienClass;
+ close tremulous_alienclass
+ }
+ }
+
+ itemDef
+ {
+ name infopane
+ ownerdraw UI_ACLASSINFOPANE
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ style WINDOW_STYLE_EMPTY
+ rect 152 8 240 204
+ textscale .33
+ textalignx 6
+ textaligny 12
+ border 1
+ bordercolor 0.5 0.5 0.5 0.5
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ outlinecolor 0.1 0.1 0.1 0.5
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name "Back"
+ text "< Back"
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ rect 152 218 50 21
+ textalign ITEM_ALIGN_LEFT
+ textalignx 3
+ textaligny 18
+ textscale .4
+ forecolor 1 1 1 1
+ backcolor .5 0 0 .25
+ visible 1
+ action
+ {
+ play "sound/misc/menu4.wav";
+ close tremulous_alienclass;
+ open tremulous_teamselect
+ }
+ }
+
+ itemDef
+ {
+ name "OKCancel"
+ text "OK"
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ rect 305 218 34 21
+ textalign ITEM_ALIGN_LEFT
+ textalignx 12.5
+ textaligny 18
+ textscale .4
+ forecolor 1 1 1 1
+ backcolor .5 0 0 .25
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript SpawnAsAlienClass;
+ close tremulous_alienclass
+ }
+ }
+
+ itemDef
+ {
+ name "OKCancel"
+ text "Cancel"
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ rect 344 218 50 21
+ textalign ITEM_ALIGN_LEFT
+ textalignx 3.8
+ textaligny 18
+ textscale .4
+ forecolor 1 1 1 1
+ backcolor .5 0 0 .25
+ visible 1
+ action
+ {
+ play "sound/misc/menu3.wav";
+ close tremulous_alienclass
+ }
+ }
+ }
+}
diff --git a/tremulous_ui/tremulous_aliendialogs.menu b/tremulous_ui/tremulous_aliendialogs.menu
new file mode 100644
index 00000000..bbea3989
--- /dev/null
+++ b/tremulous_ui/tremulous_aliendialogs.menu
@@ -0,0 +1,85 @@
+#include "ui/menudef.h"
+
+{
+ menuDef
+ {
+ name "tremulous_alien_dialog"
+ visible 0
+ fullscreen 0
+ outOfBoundsClick
+ rect 185 140 280 190
+ focusColor 1 .75 0 1
+ style WINDOW_STYLE_EMPTY
+ popup
+
+ itemDef
+ {
+ name window
+ rect 0 0 280 190
+ style WINDOW_STYLE_FILLED
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+
+ border WINDOW_BORDER_FULL
+ borderSize 1.0
+ borderColor 0.5 0.5 0.5 1
+ }
+
+ itemDef
+ {
+ name alien_dialog
+ text "Error"
+ type ITEM_TYPE_TEXT
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ style WINDOW_STYLE_EMPTY
+ rect 115 10 50 20
+ textalign ITEM_ALIGN_LEFT
+ textalignx 5
+ textaligny 18
+ textscale .4
+ forecolor 1 1 1 1
+ backcolor .5 0 0 .25
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name alien_dialog
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ style WINDOW_STYLE_EMPTY
+ rect 10 50 250 80
+ cvar "ui_dialog"
+ autowrapped
+ textalignx 5
+ textaligny 18
+ textscale .33
+ forecolor 1 1 1 1
+ backcolor .5 0 0 .25
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name alien_dialog
+ text "OK"
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ rect 242 150 28 20
+ textalign ITEM_ALIGN_LEFT
+ textalignx 5
+ textaligny 18
+ textscale .4
+ forecolor 1 1 1 1
+ backcolor .5 0 0 .25
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ close tremulous_alien_dialog
+ }
+ }
+ }
+}
diff --git a/tremulous_ui/tremulous_alienupgrade.menu b/tremulous_ui/tremulous_alienupgrade.menu
new file mode 100644
index 00000000..89278d06
--- /dev/null
+++ b/tremulous_ui/tremulous_alienupgrade.menu
@@ -0,0 +1,117 @@
+#include "ui/menudef.h"
+
+{
+ menuDef
+ {
+ name "tremulous_alienupgrade"
+ visible 1
+ fullscreen 0
+ outOfBoundsClick
+ rect 112 111 400 247
+ focusColor 1 .75 0 1
+ style 1
+ popup
+ onOpen { uiScript LoadAlienUpgrades; setFocus list }
+
+ itemDef
+ {
+ name window
+ rect 0 0 400 247
+ style WINDOW_STYLE_FILLED
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+
+ border WINDOW_BORDER_FULL
+ borderSize 1.0
+ borderColor 0.5 0.5 0.5 1
+ }
+
+ itemDef
+ {
+ name "list"
+ rect 8 8 136 231
+ type ITEM_TYPE_LISTBOX
+ style WINDOW_STYLE_EMPTY
+ elementwidth 120
+ elementheight 20
+ textscale .33
+ elementtype LISTBOX_TEXT
+ feeder FEEDER_TREMALIENUPGRADE
+ border 1
+ bordercolor 0.5 0.5 0.5 0.5
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ outlinecolor 0.1 0.1 0.1 0.5
+ visible 1
+ doubleclick
+ {
+ play "sound/misc/menu1.wav";
+ uiScript UpgradeToNewClass;
+ close tremulous_alienupgrade
+ }
+ }
+
+ itemDef
+ {
+ name infopane
+ ownerdraw UI_AUPGRADEINFOPANE
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ style WINDOW_STYLE_EMPTY
+ rect 152 8 240 204
+ textscale .33
+ textalignx 6
+ textaligny 12
+ border 1
+ bordercolor 0.5 0.5 0.5 0.5
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ outlinecolor 0.1 0.1 0.1 0.5
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name "OKCancel"
+ text "OK"
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ rect 305 218 34 21
+ textalign ITEM_ALIGN_LEFT
+ textalignx 12.5
+ textaligny 18
+ textscale .4
+ forecolor 1 1 1 1
+ backcolor .5 0 0 .25
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript UpgradeToNewClass;
+ close tremulous_alienupgrade
+ }
+ }
+
+ itemDef
+ {
+ name "OKCancel"
+ text "Cancel"
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ rect 344 218 50 21
+ textalign ITEM_ALIGN_LEFT
+ textalignx 3.8
+ textaligny 18
+ textscale .4
+ forecolor 1 1 1 1
+ backcolor .5 0 0 .25
+ visible 1
+ action
+ {
+ play "sound/misc/menu3.wav";
+ close tremulous_alienupgrade
+ }
+ }
+ }
+}
diff --git a/tremulous_ui/tremulous_default_hud.menu b/tremulous_ui/tremulous_default_hud.menu
new file mode 100644
index 00000000..732c4119
--- /dev/null
+++ b/tremulous_ui/tremulous_default_hud.menu
@@ -0,0 +1,103 @@
+#include "ui/menudef.h"
+
+{
+ menuDef
+ {
+ name "default_hud"
+ fullScreen MENU_FALSE
+ visible MENU_TRUE
+ rect 0 0 640 480
+
+ //CONSOLE
+ itemDef
+ {
+ name "console"
+ rect 8 8 560 180
+ style WINDOW_STYLE_EMPTY
+ visible 1
+ decoration
+ forecolor 1 1 1 1
+ align ITEM_ALIGN_LEFT
+ textalignx 0
+ textaligny 18
+ textscale 0.4
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ ownerdraw CG_CONSOLE
+ }
+
+ //FPS
+ itemDef
+ {
+ name "fps"
+ rect 572 8 56 22
+ style WINDOW_STYLE_EMPTY
+ visible 1
+ decoration
+ forecolor 1 1 1 1
+ align ITEM_ALIGN_RIGHT
+ textalignx 0
+ textaligny 18
+ textscale 0.3
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ ownerdraw CG_FPS
+ }
+ //TIMER
+ itemDef
+ {
+ name "timer"
+ rect 572 38 56 22
+ style WINDOW_STYLE_EMPTY
+ visible 1
+ decoration
+ forecolor 1 1 1 1
+ align ITEM_ALIGN_RIGHT
+ textalignx 0
+ textaligny 18
+ textscale 0.3
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ ownerdraw CG_TIMER
+ }
+
+ //SNAPSHOT
+ itemDef
+ {
+ name "snapshot"
+ rect 8 196 200 22
+ style WINDOW_STYLE_EMPTY
+ visible 1
+ decoration
+ forecolor 1 1 1 1
+ align ITEM_ALIGN_RIGHT
+ textalignx 0
+ textaligny 18
+ textscale 0.4
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ ownerdraw CG_SNAPSHOT
+ }
+ //LAGOMETER
+ itemDef
+ {
+ name "lagometer"
+ rect 596 68 32 20
+ style WINDOW_STYLE_EMPTY
+ visible 1
+ decoration
+ forecolor 1 1 1 1
+ textscale 0.3
+ textalignx 1
+ textaligny 0.5
+ ownerdraw CG_LAGOMETER
+ }
+
+ //PLAYER NAME
+ itemDef
+ {
+ name "playername"
+ rect 200 275 240 25
+ visible 1
+ decoration
+ textScale .5
+ ownerdraw CG_PLAYER_CROSSHAIRNAMES
+ }
+ }
+}
diff --git a/tremulous_ui/tremulous_human_hud.menu b/tremulous_ui/tremulous_human_hud.menu
new file mode 100644
index 00000000..4a67c9cf
--- /dev/null
+++ b/tremulous_ui/tremulous_human_hud.menu
@@ -0,0 +1,398 @@
+#include "ui/menudef.h"
+
+// team menu
+//
+// defines from ui_shared.h
+
+{
+ menuDef
+ {
+ name "human_hud"
+ fullScreen MENU_FALSE
+ visible MENU_TRUE
+ rect 0 0 640 480
+
+ //CONSOLE
+ itemDef
+ {
+ name "console"
+ rect 8 8 560 180
+ style WINDOW_STYLE_EMPTY
+ visible 1
+ decoration
+ forecolor 1 1 1 1
+ align ITEM_ALIGN_LEFT
+ textalignx 0
+ textaligny 18
+ textscale 0.4
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ ownerdraw CG_CONSOLE
+ }
+
+ //LAGOMETER
+ itemDef
+ {
+ name "lagometer"
+ rect 596 68 32 20
+ style WINDOW_STYLE_EMPTY
+ visible 1
+ decoration
+ forecolor 0 0.8 1 1
+ textscale 0.3
+ textalignx 1
+ textaligny 0.5
+ ownerdraw CG_LAGOMETER
+ }
+
+ //FPS
+ itemDef
+ {
+ name "fps"
+ rect 572 8 56 22
+ style WINDOW_STYLE_EMPTY
+ visible 1
+ decoration
+ forecolor 0.0 0.8 1.0 1
+ align ITEM_ALIGN_RIGHT
+ textalignx 0
+ textaligny 18
+ textscale 0.3
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ ownerdraw CG_FPS
+ }
+
+ //TIMER
+ itemDef
+ {
+ name "timer"
+ rect 572 38 56 22
+ style WINDOW_STYLE_EMPTY
+ visible 1
+ decoration
+ forecolor 0.0 0.8 1.0 1
+ align ITEM_ALIGN_RIGHT
+ textalignx 0
+ textaligny 18
+ textscale 0.3
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ ownerdraw CG_TIMER
+ }
+
+ //SNAPSHOT
+ itemDef
+ {
+ name "snapshot"
+ rect 8 196 200 22
+ style WINDOW_STYLE_EMPTY
+ visible 1
+ decoration
+ forecolor 1 1 1 1
+ align ITEM_ALIGN_RIGHT
+ textalignx 0
+ textaligny 18
+ textscale 0.4
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ ownerdraw CG_SNAPSHOT
+ }
+
+ //////////////////
+ //STATIC OBJECTS//
+ //////////////////
+
+ //LEFT CIRCLE
+ itemDef
+ {
+ name "left-circle"
+ rect 35 417.5 25 25
+ visible 1
+ decoration
+ forecolor 0.0 0.8 1.0 0.25
+ style WINDOW_STYLE_SHADER
+ background "ui/assets/neutral/circle.tga"
+ }
+
+ //LEFT ARM
+ itemDef
+ {
+ name "left-arm"
+ rect 68.25 420 94.5 35
+ visible 1
+ decoration
+ forecolor 0.0 0.8 1.0 0.25
+ style WINDOW_STYLE_SHADER
+ background "ui/assets/human/left-arm.tga"
+ }
+
+ //CREDITS LABEL
+ itemDef
+ {
+ name "credits-label"
+ rect 508 403 7 7.5
+ visible 1
+ decoration
+ forecolor 0.0 0.8 1.0 0.5
+ style WINDOW_STYLE_SHADER
+ background "ui/assets/human/credits.tga"
+ }
+
+ //RIGHT CIRCLE
+ itemDef
+ {
+ name "right-circle"
+ rect 580 417.5 25 25
+ visible 1
+ decoration
+ forecolor 0.0 0.8 1.0 0.25
+ style WINDOW_STYLE_SHADER
+ background "ui/assets/neutral/circle.tga"
+ }
+
+ //RIGHT ARM
+ itemDef
+ {
+ name "right-arm"
+ rect 477.25 420 94.5 35
+ visible 1
+ decoration
+ forecolor 0.0 0.8 1.0 0.25
+ style WINDOW_STYLE_SHADER
+ background "ui/assets/human/right-arm.tga"
+ }
+
+ //RIGHT CAP
+ itemDef
+ {
+ name "right-cap"
+ rect 500 400 80 15
+ visible 1
+ decoration
+ forecolor 0.0 0.8 1.0 0.25
+ style WINDOW_STYLE_SHADER
+ background "ui/assets/human/right-cap.tga"
+ }
+
+ ///////////////////
+ //DYNAMIC OBJECTS//
+ ///////////////////
+
+ //BOLT
+ itemDef
+ {
+ name "bolt"
+ rect 40 420 15 20
+ visible 1
+ decoration
+ forecolor 0.0 0.8 1.0 0.5
+ background "ui/assets/human/bolt.tga"
+ ownerdraw CG_PLAYER_STAMINA_BOLT
+ }
+
+ //CROSS
+ itemDef
+ {
+ name "cross"
+ rect 137.5 430 15 15
+ visible 1
+ decoration
+ forecolor 0.0 0.8 1.0 0.5
+ background "ui/assets/neutral/cross.tga"
+ ownerdraw CG_PLAYER_HEALTH_CROSS
+ }
+
+ //STAMINA 1
+ itemDef
+ {
+ name "stamina1"
+ rect 34.5 403.5 9 11.5
+ visible 1
+ decoration
+ forecolor 0.0 0.8 1.0 0.5
+ background "ui/assets/human/stamina1.tga"
+ ownerdraw CG_PLAYER_STAMINA_1
+ }
+
+ //STAMINA 2
+ itemDef
+ {
+ name "stamina2"
+ rect 24 410.75 11.5 10.5
+ visible 1
+ decoration
+ forecolor 0.0 0.8 1.0 0.5
+ background "ui/assets/human/stamina2.tga"
+ ownerdraw CG_PLAYER_STAMINA_2
+ }
+
+ //STAMINA 3
+ itemDef
+ {
+ name "stamina3"
+ rect 20.75 423.5 10.5 7
+ visible 1
+ decoration
+ forecolor 0.0 0.8 1.0 0.5
+ background "ui/assets/human/stamina3.tga"
+ ownerdraw CG_PLAYER_STAMINA_3
+ }
+
+ //STAMINA 4
+ itemDef
+ {
+ name "stamina4"
+ rect 21 402.5 54 55
+ visible 1
+ decoration
+ forecolor 0.0 0.8 1.0 0.5
+ background "ui/assets/human/stamina4.tga"
+ ownerdraw CG_PLAYER_STAMINA_4
+ }
+
+ //RING
+ itemDef
+ {
+ name "ring"
+ // rect 20 402.5 55 55 // Guide for Stamina alignment
+ rect 565 402.5 55 55
+ visible 1
+ decoration
+ forecolor 0.0 0.8 1.0 0.5
+ background "ui/assets/human/ring.tga"
+ ownerdraw CG_PLAYER_CLIPS_RING
+ }
+
+ //CREDITS
+ itemDef
+ {
+ name "credits"
+ rect 515 402 45 11.25
+ visible 1
+ decoration
+ forecolor 0.0 0.8 1.0 0.5
+ ownerdraw CG_PLAYER_CREDITS_VALUE
+ }
+
+ //HEALTH
+ itemDef
+ {
+ name "health"
+ rect 67 430 60 15
+ visible 1
+ decoration
+ forecolor 0.0 0.8 1.0 .5
+ ownerdraw CG_PLAYER_HEALTH
+ }
+
+ //WEAPON ICON
+ itemDef
+ {
+ name "weapon"
+ rect 482.5 425 25 25
+ visible 1
+ decoration
+ forecolor 0.0 0.8 1.0 0.5
+ ownerdraw CG_PLAYER_WEAPONICON
+ }
+
+ //WEAPON SELECT TEXT
+ itemDef
+ {
+ name "selecttext"
+ rect 200 300 240 25
+ visible 1
+ decoration
+ textScale .5
+ ownerdraw CG_PLAYER_SELECTTEXT
+ }
+
+ //AMMO
+ itemDef
+ {
+ name "ammo"
+ rect 494 430 60 15
+ visible 1
+ decoration
+ forecolor 0.0 0.8 1.0 .5
+ ownerdraw CG_PLAYER_AMMO_VALUE
+ }
+
+ //CLIPS
+ itemDef
+ {
+ name "clips"
+ rect 538 423 60 15
+ visible 1
+ decoration
+ forecolor 0.0 0.8 1.0 .5
+ ownerdraw CG_PLAYER_CLIPS_VALUE
+ }
+
+ //BUILD TIMER
+ itemDef
+ {
+ name "buildtimer"
+ rect 580 417.5 25 25
+ visible 1
+ decoration
+ forecolor 0.0 0.8 1.0 .5
+ ownerdraw CG_PLAYER_BUILD_TIMER
+ }
+
+ //USABLE
+ itemDef
+ {
+ name "usable"
+ rect 307.5 380 25 25
+ visible 1
+ decoration
+ forecolor 0.0 0.8 1.0 .5
+ background "ui/assets/neutral/use.tga"
+ ownerdraw CG_PLAYER_USABLE_BUILDABLE
+ }
+
+ //SCANNER
+ itemDef
+ {
+ name "scanner"
+ rect 164 340 312 72
+ visible 1
+ decoration
+ forecolor 0.0 0.8 1.0 .5
+ background "ui/assets/human/scanner.tga"
+ ownerdraw CG_PLAYER_HUMAN_SCANNER
+ }
+
+ //INVENTORY
+ itemDef
+ {
+ name "inventory"
+ rect 232.5 425 175 25
+ visible 1
+ decoration
+ forecolor 0.0 0.8 1.0 0.5
+ ownerdraw CG_PLAYER_SELECT
+ }
+
+ //SELECTED
+ itemDef
+ {
+ name "selected"
+ rect 306 424 27 27
+ visible 1
+ decoration
+ forecolor 0.0 0.8 1.0 0.25
+ style WINDOW_STYLE_SHADER
+ background "ui/assets/neutral/selected.tga"
+ }
+
+ //PLAYER NAME
+ itemDef
+ {
+ name "playername"
+ rect 200 275 240 25
+ visible 1
+ decoration
+ textScale .5
+ ownerdraw CG_PLAYER_CROSSHAIRNAMES
+ }
+ }
+}
diff --git a/tremulous_ui/tremulous_humanarmoury.menu b/tremulous_ui/tremulous_humanarmoury.menu
new file mode 100644
index 00000000..53b10037
--- /dev/null
+++ b/tremulous_ui/tremulous_humanarmoury.menu
@@ -0,0 +1,165 @@
+#include "ui/menudef.h"
+
+{
+ menuDef
+ {
+ name "tremulous_humanarmoury"
+ visible 0
+ fullscreen 0
+ outOfBoundsClick
+ rect 44 111 544 247
+ focusColor 1 .75 0 1
+ style 1
+ popup
+ onOpen
+ {
+ uiScript LoadHumanArmouryBuys;
+ uiScript LoadHumanArmourySells;
+ setFocus list
+ }
+
+ itemDef
+ {
+ name window
+ rect 0 0 544 247
+ style WINDOW_STYLE_FILLED
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+
+ border WINDOW_BORDER_FULL
+ borderSize 1.0
+ borderColor 0.5 0.5 0.5 1
+ }
+
+ itemDef
+ {
+ name "buylist"
+ rect 8 8 136 231
+ type ITEM_TYPE_LISTBOX
+ style WINDOW_STYLE_EMPTY
+ elementwidth 120
+ elementheight 20
+ textscale .33
+ elementtype LISTBOX_TEXT
+ feeder FEEDER_TREMHUMANARMOURYBUY
+ border 1
+ bordercolor 0.5 0.5 0.5 0.5
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ outlinecolor 0.1 0.1 0.1 0.5
+ visible 1
+ doubleclick
+ {
+ play "sound/misc/menu1.wav";
+ uiScript BuyFromArmoury
+ }
+ }
+
+ itemDef
+ {
+ name "selllist"
+ rect 400 8 136 231
+ type ITEM_TYPE_LISTBOX
+ style WINDOW_STYLE_EMPTY
+ elementwidth 120
+ elementheight 20
+ textscale .33
+ elementtype LISTBOX_TEXT
+ feeder FEEDER_TREMHUMANARMOURYSELL
+ border 1
+ bordercolor 0.5 0.5 0.5 0.5
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ outlinecolor 0.1 0.1 0.1 0.5
+ visible 1
+ doubleclick
+ {
+ play "sound/misc/menu1.wav";
+ uiScript SellToArmoury
+ }
+ }
+
+ itemDef
+ {
+ name infopane
+ ownerdraw UI_HBUYINFOPANE
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ style WINDOW_STYLE_EMPTY
+ rect 152 8 240 204
+ textscale .33
+ textalignx 6
+ textaligny 12
+ border 1
+ bordercolor 0.5 0.5 0.5 0.5
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ outlinecolor 0.1 0.1 0.1 0.5
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name "Close"
+ text "Close"
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ rect 254 218 50 21
+ textalign ITEM_ALIGN_LEFT
+ textalignx 3
+ textaligny 18
+ textscale .4
+ forecolor 1 1 1 1
+ backcolor .5 0 0 .25
+ visible 1
+ action
+ {
+ play "sound/misc/menu4.wav";
+ close tremulous_humanarmoury
+ }
+ }
+
+ itemDef
+ {
+ name "Buy"
+ text "Buy >"
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ rect 152 218 50 21
+ textalign ITEM_ALIGN_LEFT
+ textalignx 12.5
+ textaligny 18
+ textscale .4
+ forecolor 1 1 1 1
+ backcolor .5 0 0 .25
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript BuyFromArmoury
+ }
+ }
+
+ itemDef
+ {
+ name "Sell"
+ text "< Sell"
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ rect 344 218 50 21
+ textalign ITEM_ALIGN_LEFT
+ textalignx 3.8
+ textaligny 18
+ textscale .4
+ forecolor 1 1 1 1
+ backcolor .5 0 0 .25
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript SellToArmoury
+ }
+ }
+ }
+}
diff --git a/tremulous_ui/tremulous_humanbuild.menu b/tremulous_ui/tremulous_humanbuild.menu
new file mode 100644
index 00000000..65a5a0e4
--- /dev/null
+++ b/tremulous_ui/tremulous_humanbuild.menu
@@ -0,0 +1,116 @@
+#include "ui/menudef.h"
+
+{
+ menuDef
+ {
+ name "tremulous_humanbuild"
+ visible 0
+ fullscreen 0
+ outOfBoundsClick
+ rect 112 111 400 247
+ focusColor 1 .75 0 1
+ style 1
+ popup
+ onOpen { uiScript LoadHumanBuilds; setFocus list }
+
+ itemDef
+ {
+ name window
+ rect 0 0 400 247
+ style WINDOW_STYLE_FILLED
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+
+ border WINDOW_BORDER_FULL
+ borderSize 1.0
+ borderColor 0.5 0.5 0.5 1
+ }
+
+ itemDef
+ {
+ name "list"
+ rect 8 8 136 231
+ type ITEM_TYPE_LISTBOX
+ style WINDOW_STYLE_EMPTY
+ elementwidth 120
+ elementheight 20
+ textscale .33
+ elementtype LISTBOX_TEXT
+ feeder FEEDER_TREMHUMANBUILD
+ border 1
+ bordercolor 0.5 0.5 0.5 0.5
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ outlinecolor 0.1 0.1 0.1 0.5
+ visible 1
+ doubleclick
+ {
+ play "sound/misc/menu1.wav";
+ uiScript BuildHumanBuildable;
+ close tremulous_humanbuild
+ }
+ }
+
+ itemDef
+ {
+ name infopane
+ ownerdraw UI_HBUILDINFOPANE
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ style WINDOW_STYLE_EMPTY
+ rect 152 8 240 204
+ textscale .33
+ textalignx 6
+ textaligny 12
+ border 1
+ bordercolor 0.5 0.5 0.5 0.5
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name "OKCancel"
+ text "OK"
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ rect 305 218 34 21
+ textalign ITEM_ALIGN_LEFT
+ textalignx 12.5
+ textaligny 18
+ textscale .4
+ forecolor 1 1 1 1
+ backcolor .5 0 0 .25
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript BuildHumanBuildable;
+ close tremulous_humanbuild
+ }
+ }
+
+ itemDef
+ {
+ name "OKCancel"
+ text "Cancel"
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ rect 344 218 50 21
+ textalign ITEM_ALIGN_LEFT
+ textalignx 3.8
+ textaligny 18
+ textscale .4
+ forecolor 1 1 1 1
+ backcolor .5 0 0 .25
+ visible 1
+ action
+ {
+ play "sound/misc/menu3.wav";
+ close tremulous_humanbuild
+ }
+ }
+ }
+}
diff --git a/tremulous_ui/tremulous_humandialogs.menu b/tremulous_ui/tremulous_humandialogs.menu
new file mode 100644
index 00000000..824d2cf0
--- /dev/null
+++ b/tremulous_ui/tremulous_humandialogs.menu
@@ -0,0 +1,85 @@
+#include "ui/menudef.h"
+
+{
+ menuDef
+ {
+ name "tremulous_human_dialog"
+ visible 0
+ fullscreen 0
+ outOfBoundsClick
+ rect 185 140 280 190
+ focusColor 1 .75 0 1
+ style WINDOW_STYLE_EMPTY
+ popup
+
+ itemDef
+ {
+ name window
+ rect 0 0 280 190
+ style WINDOW_STYLE_FILLED
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+
+ border WINDOW_BORDER_FULL
+ borderSize 1.0
+ borderColor 0.5 0.5 0.5 1
+ }
+
+ itemDef
+ {
+ name human_dialog
+ text "Error"
+ type ITEM_TYPE_TEXT
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ style WINDOW_STYLE_EMPTY
+ rect 115 10 50 20
+ textalign ITEM_ALIGN_LEFT
+ textalignx 5
+ textaligny 18
+ textscale .4
+ forecolor 1 1 1 1
+ backcolor .5 0 0 .25
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name human_dialog
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ style WINDOW_STYLE_EMPTY
+ rect 10 50 250 80
+ cvar "ui_dialog"
+ autowrapped
+ textalignx 5
+ textaligny 18
+ textscale .33
+ forecolor 1 1 1 1
+ backcolor .5 0 0 .25
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name human_dialog
+ text "OK"
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ rect 242 150 28 20
+ textalign ITEM_ALIGN_LEFT
+ textalignx 5
+ textaligny 18
+ textscale .4
+ forecolor 1 1 1 1
+ backcolor .5 0 0 .25
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ close tremulous_human_dialog
+ }
+ }
+ }
+}
diff --git a/tremulous_ui/tremulous_humanitem.menu b/tremulous_ui/tremulous_humanitem.menu
new file mode 100644
index 00000000..92e4dd0d
--- /dev/null
+++ b/tremulous_ui/tremulous_humanitem.menu
@@ -0,0 +1,139 @@
+#include "ui/menudef.h"
+
+{
+ menuDef
+ {
+ name "tremulous_humanitem"
+ visible 0
+ fullscreen 0
+ outOfBoundsClick
+ rect 112 111 400 247
+ focusColor 1 .75 0 1
+ style 1
+ popup
+ onOpen { uiScript LoadHumanItems; setFocus list }
+
+ itemDef
+ {
+ name window
+ rect 0 0 400 247
+ style WINDOW_STYLE_FILLED
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+
+ border WINDOW_BORDER_FULL
+ borderSize 1.0
+ borderColor 0.5 0.5 0.5 1
+ }
+
+ itemDef
+ {
+ name "list"
+ rect 8 8 136 231
+ type ITEM_TYPE_LISTBOX
+ style WINDOW_STYLE_EMPTY
+ elementwidth 120
+ elementheight 20
+ textscale .33
+ elementtype LISTBOX_TEXT
+ feeder FEEDER_TREMHUMANITEMS
+ border 1
+ bordercolor 0.5 0.5 0.5 0.5
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ outlinecolor 0.1 0.1 0.1 0.5
+ visible 1
+ doubleclick
+ {
+ play "sound/misc/menu1.wav";
+ uiScript SpawnWithHumanItem;
+ close tremulous_humanitem
+ }
+ }
+
+ itemDef
+ {
+ name infopane
+ ownerdraw UI_HITEMINFOPANE
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ style WINDOW_STYLE_EMPTY
+ rect 152 8 240 204
+ textscale .33
+ textalignx 6
+ textaligny 12
+ border 1
+ bordercolor 0.5 0.5 0.5 0.5
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ outlinecolor 0.1 0.1 0.1 0.5
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name "Back"
+ text "< Back"
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ rect 152 218 50 21
+ textalign ITEM_ALIGN_LEFT
+ textalignx 3
+ textaligny 18
+ textscale .4
+ forecolor 1 1 1 1
+ backcolor .5 0 0 .25
+ visible 1
+ action
+ {
+ play "sound/misc/menu4.wav";
+ close tremulous_humanitem;
+ open tremulous_teamselect
+ }
+ }
+
+ itemDef
+ {
+ name "OKCancel"
+ text "OK"
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ rect 305 218 34 21
+ textalign ITEM_ALIGN_LEFT
+ textalignx 12.5
+ textaligny 18
+ textscale .4
+ forecolor 1 1 1 1
+ backcolor .5 0 0 .25
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript SpawnWithHumanItem;
+ close tremulous_humanitem
+ }
+ }
+
+ itemDef
+ {
+ name "OKCancel"
+ text "Cancel"
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ rect 344 218 50 21
+ textalign ITEM_ALIGN_LEFT
+ textalignx 3.8
+ textaligny 18
+ textscale .4
+ forecolor 1 1 1 1
+ backcolor .5 0 0 .25
+ visible 1
+ action
+ {
+ play "sound/misc/menu3.wav";
+ close tremulous_humanitem
+ }
+ }
+ }
+}
diff --git a/tremulous_ui/tremulous_teamselect.menu b/tremulous_ui/tremulous_teamselect.menu
new file mode 100644
index 00000000..9fb6b6ce
--- /dev/null
+++ b/tremulous_ui/tremulous_teamselect.menu
@@ -0,0 +1,117 @@
+#include "ui/menudef.h"
+
+{
+ menuDef
+ {
+ name "tremulous_teamselect"
+ visible 0
+ fullscreen 0
+ outOfBoundsClick
+ rect 112 111 400 247
+ focusColor 1 .75 0 1
+ style 1
+ popup
+ onOpen { uiScript LoadTeams; setFocus list }
+
+ itemDef
+ {
+ name window
+ rect 0 0 400 247
+ style WINDOW_STYLE_FILLED
+ backcolor 0 0 0 1
+ visible 1
+ decoration
+
+ border WINDOW_BORDER_FULL
+ borderSize 1.0
+ borderColor 0.5 0.5 0.5 1
+ }
+
+ itemDef
+ {
+ name "list"
+ rect 8 8 136 231
+ type ITEM_TYPE_LISTBOX
+ style WINDOW_STYLE_EMPTY
+ elementwidth 120
+ elementheight 20
+ textscale .33
+ elementtype LISTBOX_TEXT
+ feeder FEEDER_TREMTEAMS
+ border 1
+ bordercolor 0.5 0.5 0.5 0.5
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ outlinecolor 0.1 0.1 0.1 0.5
+ visible 1
+ doubleclick
+ {
+ play "sound/misc/menu1.wav";
+ uiScript JoinTeam;
+ close tremulous_teamselect
+ }
+ }
+
+ itemDef
+ {
+ name infopane
+ ownerdraw UI_TEAMINFOPANE
+ textstyle ITEM_TEXTSTYLE_NORMAL
+ style WINDOW_STYLE_EMPTY
+ rect 152 8 240 204
+ textscale .33
+ textalignx 6
+ textaligny 12
+ border 1
+ bordercolor 0.5 0.5 0.5 0.5
+ forecolor 1 1 1 1
+ backcolor 0.2 0.2 0.2 1
+ outlinecolor 0.1 0.1 0.1 0.5
+ visible 1
+ decoration
+ }
+
+ itemDef
+ {
+ name "OKCancel"
+ text "OK"
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ rect 305 218 34 21
+ textalign ITEM_ALIGN_LEFT
+ textalignx 12.5
+ textaligny 18
+ textscale .4
+ forecolor 1 1 1 1
+ backcolor .5 0 0 .25
+ visible 1
+ action
+ {
+ play "sound/misc/menu1.wav";
+ uiScript JoinTeam;
+ close tremulous_teamselect
+ }
+ }
+
+ itemDef
+ {
+ name "OKCancel"
+ text "Cancel"
+ type ITEM_TYPE_BUTTON
+ style WINDOW_STYLE_EMPTY
+ rect 344 218 50 21
+ textalign ITEM_ALIGN_LEFT
+ textalignx 3.8
+ textaligny 18
+ textscale .4
+ forecolor 1 1 1 1
+ backcolor .5 0 0 .25
+ visible 1
+ action
+ {
+ play "sound/misc/menu3.wav";
+ close tremulous_teamselect
+ }
+ }
+ }
+}