Index: baseef/ext_data/mp_normaltext2_deutsch.dat
===================================================================
--- baseef/ext_data/mp_normaltext2_deutsch.dat	(revision 0)
+++ baseef/ext_data/mp_normaltext2_deutsch.dat	(revision 42)
@@ -0,0 +1,568 @@
+
+"ELITE FORCE HOLOMATCH: HAUPTMENÜ"
+"ELITE FORCE HOLOMATCH: CD-Key"
+"ELITE FORCE HOLOMATCH: DEMOS"
+"ELITE FORCE HOLOMATCH: SETUP"
+"ELITE FORCE HOLOMATCH: SOLO-MATCH"
+"ELITE FORCE HOLOMATCH: MULTI-MATCH"
+"ELITE FORCE HOLOMATCH: MODIFIKATIONEN"
+"ELITE FORCE HOLOMATCH: BEENDEN"
+"ELITE FORCE HOLOMATCH: SPIELMENÜ"
+"ELITE FORCE HOLOMATCH: TEAM-MENÜ"
+
+// Ingame Menu
+"SPIELMENÜ"
+
+// Team Menu
+"TEAM-MENÜ"
+
+// Demos Screen
+"DEMONSTRATIONEN"
+"AKTUELLE DATEI"
+"AKTUELL VERFÜGBARE DEMOS"
+
+// HAUPTMENÜ
+"ALPHA"
+"STELLARE KARTOGRAPHIE"
+"VEREINTE FÖDERATION DER PLANETEN, GEGRÜNDET 2161. HAUPTPLANET: ERDE."
+"WAFFENSTILLSTAND MIT DER FÖDERATION 2367. HAUPTPLANET: CARDASSIA."
+"KULTUR DES SKRUPELLOSEN KAPITALISMUS. HAUPTPLANET: FERENGINAR."
+"SEITENLINIE DER VULKANISCHEN KULTUR. HAUPTPLANETEN: ROMULUS & REMUS."
+"ERSTER KONTAKT MIT DER FÖDERATION 2218. HAUPTPLANET: QO'NOS."
+"MÄCHTIGE ALLIANZ VON PLANETARISCHEN GRUPPEN IM GAMMA-QUADRANTEN."
+"NCC-74656, INTREPID-KLASSE, AUF DEM RÜCKWEG AUS DEM DELTA-QUADRANTEN."
+"RASSE DER CYBORG, ERSTKONTAKT MIT DER FÖDERATION DURCH EIN WESEN NAMENS 'Q'."
+"KÜNSTLICHER, 70.000 LICHTJAHRE LANGER DURCHGANG VON BAJOR ZUM GAMMA-QUADRANTEN."
+"ZENTRUM DER MILCHSTRASSE, ANGEBLICHER ORT VON SHA KA REE."
+"EIN VIERTEL DER MILCHSTRASSE, ENTHÄLT DIE VEREINIGTE FÖDERATION DER PLANETEN."
+"EIN VIERTEL DER MILCHSTRASSE MIT DEN KLINGONISCHEN UND ROMULANISCHEN IMPERIEN."
+"EIN VIERTEL DER MILCHSTRASSE, UNERFORSCHT, VERMUTLICH HEIMAT DER BORG."
+"EIN VIERTEL DER MILCHSTRASSE, MOMENTAN ERFORSCHT DURCH BAJORANISCHES WURMLOCH."
+
+// Video Setup Menu
+"GRAFIKSETUP"
+"HOHE QUALITÄT"
+"NORMAL"
+"SCHNELL"
+"SCHNELLSTE"
+"EIGEN"
+"STANDARD"
+"VOODOO"
+"AUS"
+"EIN"
+"320X240"
+"400X300"
+"512X384"
+"640X480"
+"800X600"
+"960X720"
+"1024x768"
+"1152x864"
+"1280x1024"
+"1600x1200"
+"2048x1536"
+"856x480 Widescreen"
+"STANDARD"
+"16-BIT"
+"32-BIT"
+"LIGHTMAP"
+"VERTEX"
+"NIEDRIG"
+"MITTEL"
+"HOCH"
+"SEHR HOCH"
+"BILINEAR"
+"TRILINEAR"
+
+// Player setup
+"ELITE FORCE HOLOMATCH: SPIELERWECHSEL"
+"SPIELERSETUP"
+"KEIN"
+"95"
+"90"
+"85"
+"80"
+"75"
+"70"
+"65"
+"60"
+"55"
+"50"
+"45"
+"40"
+"35"
+"30"
+"25"
+"20"
+"15"
+"10"
+"5"
+
+// Video Driver Menu
+"GRAFIKTREIBER"
+"GRAFIKTREIBER"
+"HERSTELLER:"
+"VERSION:"
+"RENDERER:"
+"PIXELFORMAT:"
+"ERWEITERUNGEN:"
+
+// Setup / Controls / Weapons
+"WAFFENTASTEN-SETUP"
+
+// Sound Menu
+"SOUNDSETUP"
+"OPENAL"
+
+// Game Options
+"KEINES"
+"SPIELOPTIONEN-SETUP"
+
+// Quit screen
+"SCHIFFSSYSTEME"
+"ELITE FORCE BEENDEN?"
+
+	// Multiplayer Server
+"LOKAL"
+"MPLAYER"
+"INTERNET1"
+"FAVORITEN"
+"ALLE"
+"FREI FÜR ALLE"
+"TEAM-HOLOMATCH"
+"TURNIER"
+"CAPTURE THE FLAG"
+
+"SERVERNAME"
+"KARTENNAME"
+"OFFENE SPIELERPLÄTZE"
+"SPIELTYP"
+"PINGZEIT"
+
+"SERVER FINDEN"
+"SERVER ERSTELLEN"
+"SERVER SPEZIFIZIEREN"
+
+//	Specify server
+"ADRESSE"
+"PORT"
+
+"FREI FÜR ALLE"
+"TEAM-HOLOMATCH"
+"TURNIER"
+"CAPTURE THE FLAG"
+
+"NEIN"
+"JA"
+
+// Mods Menu
+"ELITE FORCE: HOLOMATCH"
+"MODIFIKATIONEN"
+"VERFÜGBARE MODIFIKATIONEN"
+
+// Single Player Menu
+"EINZELSPIELER"		
+"RANG"
+"ZUGRIFF VERWEIGERT"
+"GEGNER"
+"SPIELERDATEN"
+
+// Change Player Menu
+"SPIELERDATEN"
+
+// Single Player Reset Menu
+"SPIELER ZURÜCKSETZEN"
+
+// Setup / Controls / Attack/Look
+"ANGR.-/UMSEHTASTEN-SETUP"
+
+// Setup / Controls / Movement
+"BEWEGUNGSTASTEN-SETUP"
+
+// Setup / Controls / Mouse/JoyStick
+"MAUS-/JOYSTICK-SETUP"
+"MAUS"
+"JOYSTICK"
+
+// Skill levels
+"KADETT"
+"FÄHNRICH"
+"LIEUTENANT"
+"COMMANDER"
+"CAPTAIN"
+
+// Dedicated server
+"NEIN"
+"LAN"
+"INTERNET"
+
+// Player type
+"OFFEN"
+"HC"
+"GESCHLOSSEN"
+
+// Player team
+"BLAU"
+"ROT"
+
+// Single Player Reset
+"WARNUNG: Hier werden die Einzelspieler-Einstellungen"
+"auf Null zurückgesetzt. Tun Sie dies nur, wenn"
+"Sie wieder von vorn beginnen möchten."
+"Spielereinstellungen zurücksetzen?"
+
+//Demo screen
+"Keine Demos gefunden."
+
+"Bitte geben Sie Ihren CD-Key ein."
+"Der CD-Key ist gültig, danke."
+"Ein gültiger CD-Key wird benötigt. Nähere Hinweise im Handbuch."
+
+"Laden"
+"Verbinden mit"
+"Esc zum Abbruch drücken"
+	
+"Warten auf neuen Key ... Esc zum Abbruch"
+"EINGABETASTE oder KLICKEN zum Ändern"
+"RÜCKTASTE zum Löschen"
+"Pfeiltasten oder KLICKEN zum Ändern"
+"WARNUNG: Dies setzt ALLE Steuerungen"
+"auf ihren Standard zurück."
+"STAR TREK: VOYAGER - ELITE FORCE"
+"VON RAVEN SOFTWARE"
+
+"Name"
+"Effekte"
+
+"Dateinamen eingeben:"
+
+"Hostname"
+"Karte"
+"Spieler"
+"Typ"
+"Port"
+"Ping"
+
+"WARNUNG: Dies setzt ALLE Optionen"
+"auf ihren Standard zurück."
+
+"Eliminiert:"
+"(UNENTSCHIEDEN)"
+
+
+"WARNUNG: Dies setzt alle"
+"Einzelspielervariablen zurück."
+"Tun Sie dies nur, wenn Sie"
+"wieder von vorn beginnen möchten."
+
+"0 = KEIN LIMIT"
+
+"TASTENKÜRZEL ERSTELLEN"
+
+"PUNKTE ZEIGEN"
+"BENUTZEN"
+"LAUFEN/GEHEN"
+"VORWÄRTS"
+"ZURÜCK"
+"SCHRITT LINKS"
+"SCHRITT RECHTS"
+"AUF/SPRUNG"
+"AB/DUCKEN"
+"LINKS DREHEN"
+"RECHTS DREHEN"
+"SEITE/DREHEN"
+"BLICK AUF"
+"BLICK AB"
+"BLICK MAUS"
+"SICHT ZENTRIEREN"
+"SICHT ZOOMEN"
+"WAFFE 1"
+"WAFFE 2"
+"WAFFE 3"
+"WAFFE 4"
+"WAFFE 5"
+"WAFFE 6"
+"WAFFE 7"
+"WAFFE 8"
+"WAFFE 9"
+"ANGRIFF"
+"ALT. ANGRIFF"
+"LETZTE WAFFE"
+"NÄCHSTE WAFFE"
+"GESTE"
+"CHAT"
+"CHAT - TEAM"
+"CHAT - ZIEL"
+"CHAT - ANGREIFER"
+"IGNORIEREN"
+"NICHT MEHR IGNORIEREN"
+
+"WARNUNG" 
+"DIES STELLT ALLE OPTIONEN"
+"AUF DEN STANDARD ZURÜCK."
+"FORTFAHREN?"
+
+"STANDARDSETUP"
+
+"OPTIONSSETUP"
+
+"ANTWORTSETUP"
+"AUS"
+"OBEN RECHTS"
+"UNTEN RECHTS"
+"UNTEN LINKS"
+
+"<= 28,8K"
+"33,6K"
+"56K"
+"ISDN"
+"LAN/KABEL/xDSL"
+
+"NETZWERK-SETUP"
+
+"SERVERINFO"
+"SERVEROPTIONEN"
+
+"HC AUSWÄHLEN"
+"ELITE FORCE HOLOMATCH: SERVERINFO"
+"FREI"
+
+"ELITE FORCE HOLOMATCH: HCS HINZUFÜGEN"
+"HCS HINZUFÜGEN"
+
+"HOLOGRAFISCHE CHARAKTERE"
+"EINSTELLUNGEN"
+
+"ELITE FORCE HOLOMATCH: HCS ENTFERNEN"
+"HCS ENTFERNEN "
+
+"ELITE FORCE HOLOMATCH: TEAM-BEFEHLE"
+"TEAM-BEFEHLE"
+
+"ELITE FORCE HOLOMATCH: IGNORIERTE SPIELER"
+"IGNORIERTE SPIELER"
+"SPIELERLISTE"
+
+"An alle"
+"Ich bin der Anführer."
+"Verteidigen Sie die Basis."
+"Folgen Sie mir."
+"Holen Sie die feindliche Flagge."
+"Lagern Sie hier."
+"Bericht."
+"Ich verzichte auf das Kommando."
+"Umherstreifen."
+
+"%s, verteidigen Sie die Basis."
+"%s, folgen Sie mir."
+"%s, holen Sie die feindliche Flagge."
+"%s, lagern Sie hier."
+"%s, Bericht."
+"%s, umherstreifen."
+
+"NETZWERK"
+"SOUND"
+
+"%d von %d Holomatch-Servern."
+"LEERTASTE zum Aufhören."
+
+"Keine Antwort vom Master-Server." 
+"Keine Server gefunden."
+"UPDATE für Aktualisierung klicken."
+"Nach Servern scannen."
+
+"AKTUELLE KARTE"
+"PARAMETER SORTIEREN"
+
+"SERVERINFORMATION"
+
+"HOLOMATCH"
+"GEWINNER"
+
+"ENGLISH"
+"DEUTSCH"
+
+"BRÜCKE: Kontrollzentrum des Schiffes. Der Flug-Controller ist zugleich Steuermann als auch für die Navigation verantwortlich, der Operations-Offizier weist Ressourcen zu, Taktische Offiziere kümmern sich um Waffen, Verteidigung und die innere Sicherheit."
+"VORDERE PHASER: Phaser sind die primären Angriffswaffen der Voyager. Es handelt sich dabei um Partikel-/Beam-Projektoren, die nur bei Sub-Lichtgeschwindigkeiten verwendet werden können, aber eine Reichweite von 300.000 Kilometern haben."
+"PHOTONENTORPEDO-WERFER: Photonentorpedos enthalten kleine Mengen von Materie und Antimaterie in einem magnetischen Gefäss. Torpedos werden bei Warp-Geschwindigkeit gefeuert, wodurch sie ideal sind, wenn sich das Schiff schneller als das Licht bewegt."
+"VENTRALE PHASER: Der Phaserstreifen, der entlang der unteren Sektion der Voyager verläuft. Phaser ist eine Abkürzung für PHASEN-ENERGIE-REKTIFIZIERUNG."
+"MITTLERE HÜLLEN-PHASERSTREIFEN: Die Phaserstreifen liegen an beiden Seiten der Voyager und haben einen Abschusswinkel von 180 Grad."
+"BUSSARD-KOLLEKTOREN: Elektromagnetische Geräte, entwickelt für das Sammeln von Wasserstoff für Fusionsreaktoren von Schiffen. Konzept ursprünglich 1960 vorgeschlagen von Physiker Robert W. Bussard."
+"WARPGONDELN: Grosse Aussenkonstruktionen, die den Warp-Antrieb beherbergen. Die Gondeln senken sich, wenn der Antrieb nicht aktiviert ist. Das gegliederte Design macht es möglich, Warp-Geschwindigkeit zu nutzen, ohne das Raumgefüge zu schädigen."
+"RCS-MANÖVRIERANTRIEB: Antriebseinheiten, mit der die Voyager sich sehr langsam fortbewegen kann. Nützlich, um das Schiff in kleinen Bereichen wie beispielsweise in Raumhäfen zu steuern."
+"VOYAGER: RAUMSCHIFF NCC - 74656: 344 Meter lang, 1,5 Millionen metrische Tonnen schwer mit einem Rumpf aus Tritanium/Duranium. Gebaut auf der Erdenstation McKinley; Start: Sternzeit 48038,5. Kommandantin: Captain Kathryn Janeway."
+
+"SOLO-MATCH-ARTEN"
+"LEVELS %d - %d"
+"SCHWIERIGKEITSGRAD"
+"PUNKTLIMIT"
+"MENSCH"
+"SPIELER"
+
+"ZUGRIFF ..."
+"HOLOGRAFISCHE CHARAKTERE: %d - %d"
+"SICHER"
+"BESTE"
+"MODELLE"
+"CD-KEY"
+
+"Warten auf Herausforderung"
+"Warten auf Authorisierung"
+"Warten auf Verbindung"
+"Warten auf Spielstatus ..."
+
+"FRANCAIS"
+"KEINE KARTEN GEFUNDEN"
+"ERW. SERVER-EINSTELLUNGEN"
+
+"FEHLER"
+"Muss zwischen 1 und 60 liegen"
+"Muss zwischen 0 und 64 liegen"
+"Muss zwischen 150 und 1000 liegen"
+"Muss zwischen 0 und 5000 liegen"
+"Muss zwischen 0 und 10000 liegen"
+"Muss zwischen 0 und 100 liegen"
+"Muss zwischen 0 und MAX SPIELERZAHL liegen"
+
+"HOLODECK 1"
+"WILLKOMMEN ..."
+
+"Bat'leth-Training"
+"Captain Proton"
+"Weihnachtslied"
+"Tag der Ehre"
+"Don Carlo"
+"Flotter"
+"Französischer Widerstand"
+"Golf"
+"Mechaniker"
+"Aufstand Alpha"
+"Klingonenkampf"
+"Ktarianischer Mondaufgang"
+"Medizinischer Berater"
+"Orbitales Skydiving"
+"Sozialisierung"
+"Torres 2-1-6"
+"Torres Zeta-1"
+"Geschwindigkeit"
+
+"HOLOMATCH"
+
+"TM, (R), (C) 2001 Paramount Pictures, Inc. Alle Rechte vorbehalten. Star Trek: Voyager und alle zugehörigen Marken sind Warenzeichen von Paramount Pictures."
+"Dieses Produkt enthält von Id Software, Inc. lizenzierte Software-Technologie. Id Technology (C) 1999-2001 Id Software, Inc. Alle Rechte vorbehalten."
+"HOLOMATCH VERLASSEN"
+
+"ODER"
+
+"ELITE-FORCE HOLOMATCH: BESTÄTIGUNG"
+"BESTÄTIGUNG"
+"NEUSTART?"
+"INTERNET2"
+"INTERNET3"
+"INTERNET4"
+"INTERNET5"
+"Standardwert 5"
+"Standardwert 8"
+"Standardwert 250"
+"Standardwert 800"
+"Standardwert 500"
+"Standardwert 1"
+"Standardwert 0 (AUS)"
+
+"STAR TREK: VOYAGER - ELITE FORCE"
+"VON RAVEN SOFTWARE"
+"Besuchen Sie www.ravensoft.com/eliteforce"
+
+"Drücken Sie die 'RÜCKTASTE' zum Löschen."
+
+"Stellen Sie die Helligkeit ein,"
+"bis das Symbol im Kasten"
+"kaum noch zu sehen ist."
+
+"ELITE FORCE: ERSTKONFIGURATION"
+"ERSTKONFIGURATION"
+
+"Standardwaffe für Aussenteams der Föderation."
+"Feuerkräftige Waffe der Föderation für gefährliche Missionen."
+"Unendlichkeits-Modulator: Anti-Borgwaffe entwickelt von Seven of Nine."
+"Entwickelt von der Kultur der Scavenger während der Gefangenschaft der Forge."
+"Lebendige Waffe entwickelt von den Etherianern."
+"Ermöglicht hohe Genauigkeit und Entfernung beim Feuern einer Föderationsgranate."
+"Hirogenwaffe mit Phaser-Tetryons."
+"Fortschrittliche Waffe der Föderation mit erheblichem Zerstörungspotenzial."
+"Entdeckt vom Hazard-Team auf der Mission im verlassenen Dreadnought-Kampfschiff."
+
+"ZUGRIFF AUF VOYAGER LCARS ..."
+"SCHLIESSEN VON VOYAGER LCARS ..."
+
+"Legen Sie die CD ein."
+"Ungültiger CD-Key"
+
+"Muss zwischen 0 und 120 liegen"
+"Standardwert 0"
+
+"Muss zwischen 0 und 30 liegen"
+"Standardwert 5"
+
+"Muss zwischen 0 und 120 liegen"
+"Standardwert 0"
+
+"HOLODECK-SIMULATION"
+"HOLOMATCH-WAFFEN"
+
+"BLAU"
+"ROT"
+"SEITE"
+"VON"
+
+"Download:"
+"Restzeit:"
+"Transferrate:"
+"Kalkulieren"
+"(%s von %s kopiert)"
+"(%s kopiert)"
+"%s/Sek."
+"ELITE FORCE HOLOMATCH : ERWEITERTE EINSTELLUNGEN"
+"MÖCHTEN SIE DAS AKTUELLE MATCH VERLASSEN?"
+
+"SCHRIFTEN (NUR FÜR ENTWICKLER)"
+"DAS PROGRAMM WIRD NEU GESTARTET - WEITER?"
+
+"Die Helligkeitseinstellungen werden erst"
+"durch den Button 'ÜBERNEHMEN' vorgenommen."
+
+"Empfohlene Spielerzahl"
+"Verlassen und Grafikeinstellungen verwerfen?"
+
+"Fehlerhafter Client entdeckt. Falsche .PK3-Datei!"
+"Kann Client nicht verifizieren!"
+"Sie wurden rausgeworfen."
+"Zeitüberschreitung"
+"Server heruntergefahren"
+"Verbindung unterbrochen"
+"Unterbrochener Download"
+"Server-Kommandoüberlauf"
+"Unzuverlässige Daten"
+"A3D nicht verfügbar"
+
+// NEW TEXT TO BE TRANSLATED - 03/13/01
+"Keine Klasse"
+"Infiltrator"
+"Sniper"
+"Schwere Waffen"
+"Sprengstoffexperte"
+"Mediziner"
+"Techniker"
+// NEW TEXT TO BE TRANSLATED - 03/13/01
+"Borg"
+"INVENTAR BENUTZEN"
+"OBJEKT BENUTZEN"
+"ZIELE ANSEHEN"
+"PARAMETER"
+// NEW TEXT TO BE TRANSLATED - 03/13/01
+"Muss zwischen 0 und 600 liegen"
+"Standardwert 120"
+"Muss positiv sein"
+"Standardwert 180"
+"ACTIONHELD"
+"V.I.P."
Index: baseef/ext_data/mp_normaltext2.dat
===================================================================
--- baseef/ext_data/mp_normaltext2.dat	(revision 0)
+++ baseef/ext_data/mp_normaltext2.dat	(revision 42)
@@ -0,0 +1,568 @@
+
+"ELITE FORCE HOLOMATCH : MAIN MENU"
+"ELITE FORCE HOLOMATCH : CD KEY"
+"ELITE FORCE HOLOMATCH : DEMOS"
+"ELITE FORCE HOLOMATCH : CONFIGURE"
+"ELITE FORCE HOLOMATCH : SOLO MATCH"
+"ELITE FORCE HOLOMATCH : MULTI MATCH"
+"ELITE FORCE HOLOMATCH : MODS"
+"ELITE FORCE HOLOMATCH : QUIT MENU"
+"ELITE FORCE HOLOMATCH : INGAME MENU"
+"ELITE FORCE HOLOMATCH : TEAM MENU"
+
+// Ingame Menu
+"INGAME MENU"
+
+// Team Menu
+"TEAM MENU"
+
+// Demos Screen
+"DEMONSTRATIONS"
+"CURRENT FILE"
+"CURRENT DEMOS AVAILABLE"
+
+// Main Menu
+"ALPHA"
+"STELLAR CARTOGRAPHY"
+"THE UNITED FEDERATION OF PLANETS, FOUNDED IN 2161. CAPITAL PLANET:EARTH."
+"SIGNED TRUCE WITH FEDERATION IN 2367. CAPITAL PLANET:CARDASSIA PRIME."
+"CULTURE WHICH RUTHLESSLY EMBRACES CAPITALISM. CAPITAL PLANET:FERENGINAR."
+"AN OFFSHOOT OF THE VULCAN CULTURE. CAPITAL PLANETS:ROMULUS & REMUS."
+"HAD FIRST CONTACT WITH FEDERATION IN 2218. CAPITAL PLANET:QO'NOS."
+"POWERFUL ALLIANCE OF GAMMA QUADRANT PLANETARY GROUPS."
+"NCC-74656, INTREPID CLASS STARSHIP, CURRENTLY RETURNING FROM DELTA QUADRANT."
+"CYBORG RACE, FIRST INTRODUCED TO THE FEDERATION BY ENTITY KNOWN AS 'Q'"
+"ARTIFICIAL 70,000 LIGHT YEAR PASSAGEWAY BETWEEN BAJOR AND GAMMA QUADRANT"
+"CENTER OF THE MILKY WAY GALAXY, RUMORED LOCATION OF SHA KA REE."
+"ONE QUARTER OF MILKY WAY GALAXY, CONTAINS THE UNITED FEDERATION OF PLANETS."
+"ONE QUARTER OF MILKY WAY GALAXY, CONTAINS THE KLINGON AND ROMULAN EMPIRES."
+"ONE QUARTER OF MILKY WAY GALAXY, UNEXPLORED, BELIEVED HOME OF THE BORG."
+"ONE QUARTER OF MILKY WAY GALAXY, CURRENTLY EXPLORED BY USE OF BAJORAN WORMHOLE."
+
+// Video Setup Menu
+"VIDEO CONFIGURE"
+"HIGH QUALITY"
+"NORMAL"
+"FAST"
+"FASTEST"
+"CUSTOM"
+"DEFAULT"
+"VOODOO"
+"OFF"
+"ON"
+"320X240"
+"400X300"
+"512X384"
+"640X480"
+"800X600"
+"960X720"
+"1024x768"
+"1152x864"
+"1280x1024"
+"1600x1200"
+"2048x1536"
+"856x480 Wide Screen"
+"DEFAULT"
+"16-BIT"
+"32-BIT"
+"LIGHTMAP"
+"VERTEX"
+"LOW"
+"MEDIUM"
+"HIGH"
+"VERY HIGH"
+"BILINEAR"
+"TRILINEAR"
+
+// Player setup
+"ELITE FORCE HOLOMATCH : CHANGE PLAYER"
+"PLAYER CONFIGURE"
+"NONE"
+"95"
+"90"
+"85"
+"80"
+"75"
+"70"
+"65"
+"60"
+"55"
+"50"
+"45"
+"40"
+"35"
+"30"
+"25"
+"20"
+"15"
+"10"
+"5"
+
+// Video Driver Menu
+"VIDEO DRIVER"
+"VIDEO DRIVERS"
+"VENDOR:"
+"VERSION:"
+"RENDERER:"
+"PIXELFORMAT:"
+"EXTENSIONS:"
+
+// Setup / Controls / Weapons
+"WEAPON KEYS CONFIGURE"
+
+// Sound Menu
+"SOUND CONFIGURE"
+"OPENAL"
+
+// Game Options
+"NONE"
+"GAME OPTIONS CONFIGURE"
+
+// Quit screen
+"SHIP SYSTEMS"
+"QUIT ELITE FORCE?"
+
+	// Multiplayer Server
+"LOCAL"
+"MPLAYER"
+"INTERNET1"
+"FAVORITES"
+"ALL"
+"FREE FOR ALL"
+"TEAM HOLOMATCH"
+"TOURNAMENT"
+"CAPTURE THE FLAG"
+
+"SERVER NAME"
+"MAP NAME"
+"OPEN PLAYER SPOTS"
+"GAME TYPE"
+"PING TIME"
+
+"FIND SERVER"
+"CREATE SERVER"
+"SPECIFY SERVER"
+
+//	Specify server
+"ADDRESS"
+"PORT"
+
+"FREE FOR ALL"
+"TEAM HOLOMATCH"
+"TOURNAMENT"
+"CAPTURE THE FLAG"
+
+"NO"
+"YES"
+
+// Mods Menu
+"ELITE FORCE : HOLOMATCH"
+"MODS"
+"AVAILABLE MODS"
+
+// Single Player Menu
+"SINGLE PLAYER"		
+"GRADE"
+"ACCESS DENIED"
+"OPPONENTS"
+"PLAYER DATA"
+
+// Change Player Menu
+"PLAYER DATA"
+
+// Single Player Reset Menu
+"RESET PLAYER"
+
+// Setup / Controls / Attack/Look
+"ATTACK/LOOK KEYS CONFIGURE"
+
+// Setup / Controls / Movement
+"MOVEMENT KEYS CONFIGURE"
+
+// Setup / Controls / Mouse/JoyStick
+"MOUSE/JOYSTICK CONFIGURE"
+"MOUSE"
+"JOYSTICK"
+
+// Skill levels
+"CADET"
+"ENSIGN"
+"LIEUTENANT"
+"COMMANDER"
+"CAPTAIN"
+
+// Dedicated server
+"NO"
+"LAN"
+"INTERNET"
+
+// Player type
+"OPEN"
+"HC"
+"CLOSED"
+
+// Player team
+"BLUE"
+"RED"
+
+// Single Player Reset
+"WARNING: This resets the single player standings"
+"to zero. Do this only if you want to start over"
+"from the beginning."
+"Reset Player Standings?"
+
+//Demo screen
+"No Demos Found."
+
+"Please enter your CD Key"
+"The CD Key is valid, thank you."
+"A valid CD key is required.  Please see your documentation."
+
+"Loading"
+"Connecting to"
+"Press Esc to abort"
+	
+"Waiting for new key ... ESCAPE to cancel"
+"Press ENTER or CLICK to change"
+"Press BACKSPACE to clear"
+"Use Arrow Keys or CLICK to change"
+"WARNING: This will reset all"
+"controls to their default values."
+"STAR TREK : VOYAGER - ELITE FORCE"
+"BY RAVEN SOFTWARE"
+
+"Name"
+"Effects"
+
+"Enter file name:"
+
+"Host Name"
+"Map"
+"Players"
+"Type"
+"Port"
+"Ping"
+
+"WARNING: This will reset ALL "
+"options to their default values."
+
+"Eliminated :"
+"(TIE)"
+
+
+"WARNING: This resets all of the"
+"single player game variables."
+"Do this only if you want to"
+"start over from the beginning."
+
+"0 = NO LIMIT"
+
+"CREATE SHORTCUT KEY"
+
+"SHOW SCORES"
+"USE ITEM"
+"RUN/WALK"
+"WALK FORWARD"
+"BACKPEDAL"
+"STEP LEFT"
+"STEP RIGHT"
+"UP/JUMP"
+"DOWN/CROUCH"
+"TURN LEFT"
+"TURN RIGHT"
+"SIDESTEP/TURN"
+"LOOK UP"
+"LOOK DOWN"
+"MOUSE LOOK"
+"CENTER VIEW"
+"ZOOM VIEW"
+"WEAPON 1"
+"WEAPON 2"
+"WEAPON 3"
+"WEAPON 4"
+"WEAPON 5"
+"WEAPON 6"
+"WEAPON 7"
+"WEAPON 8"
+"WEAPON 9"
+"ATTACK"
+"ALT ATTACK"
+"PREV WEAPON"
+"NEXT WEAPON"
+"GESTURE"
+"CHAT"
+"CHAT - TEAM"
+"CHAT - TARGET"
+"CHAT - ATTACKER"
+"IGNORE"
+"UNIGNORE"
+
+"WARNING" 
+"THIS WILL RESET ALL OPTIONS"
+"TO THE DEFAULT VALUES."
+"CONTINUE?"
+
+"DEFAULT CONFIGURE"
+
+"OTHER OPTIONS CONFIGURE"
+
+"REPLY - CONFIGURE"
+"OFF"
+"UPPER RIGHT"
+"LOWER RIGHT"
+"LOWER LEFT"
+
+"<= 28.8K"
+"33.6K"
+"56K"
+"ISDN"
+"LAN/CABLE/xDSL"
+
+"NETWORK CONFIGURE"
+
+"SERVER INFO"
+"SERVER OPTIONS"
+
+"HC SELECT"
+"ELITE FORCE HOLOMATCH : SERVER INFO"
+"FREE"
+
+"ELITE FORCE HOLOMATCH : ADD HC'S"
+"ADD HC'S"
+
+"HOLOGRAPHIC CHARACTERS"
+"SETTINGS"
+
+"ELITE FORCE HOLOMATCH : REMOVE HC'S"
+"REMOVE HC'S"
+
+"ELITE FORCE HOLOMATCH : TEAM ORDERS"
+"TEAM ORDERS"
+
+"ELITE FORCE HOLOMATCH : IGNORED PLAYERS"
+"IGNORED PLAYERS"
+"PLAYERLIST"
+
+"To Everyone"
+"I Am the Leader"
+"Defend the Base"
+"Follow Me"
+"Get Enemy Flag"
+"Camp Here"
+"Report"
+"I Relinquish Command"
+"Roam"
+
+"%s defend the base."
+"%s follow me."
+"%s get enemy flag."
+"%s camp here."
+"%s report."
+"%s roam."
+
+"NETWORK"
+"SOUND"
+
+"%d of %d Holomatch Servers."
+"Press SPACE to stop"
+
+"No Response From Master Server." 
+"No Servers Found."
+"Hit REFRESH to update."
+"Scanning For Servers."
+
+"CURRENT MAP"
+"SORT PARAMETERS"
+
+"SERVER INFORMATION"
+
+"HOLOMATCH"
+"WINNERS"
+
+"ENGLISH"
+"DEUTSCH"
+
+"BRIDGE: Control center of the ship. Conn (Flight Controller) is both helm and navigation, Ops (Operations) allocates resources such as power, sensor and computer time, Tactical deals with weaponry, defense, and internal security."
+"FORWARD PHASERS: phasers are the primary offensive weapon of Voyager. They are a particle/beam projector that can only be used at sub-light speeds but have an effective range of 300,000 kilometers."
+"FORWARD PHOTON TORPEDO LAUNCHERS: Photon torpedoes carry a small amount of matter and antimatter bound together in a magnetic bottle. Torpedoes are launched at warp speed making them ideal for use during faster than light travel."
+"VENTRAL PHASERS: the phaser strip located along the bottom section of Voyager. Phaser is short for PHASED ENERGY RECTIFICATION."
+"MID-HULL PHASER STRIP: located on both sides of Voyager, these have a firing arc of 180 degrees along either side of the ship."
+"BUSSARD COLLECTORS : Electromagnetic devices designed to collect hydrogen gas for use by ships fusion reactors. Concept initially proposed by physicist Robert W. Bussard in 1960."
+"WARP NACELLES : Large outboard structures which house the warp-drive engines. The nacelles lower when the engines are not in use. The articulated design allows use of warp speed without damaging the fabric of space."
+"RCS (MANEUVERING) THRUSTERS: propulsion units designed to move Voyager at very low speeds. Useful for navigating the ship in and around small areas such as space docks."
+"VOYAGER : STARSHIP NCC - 74656: 344 meters long, 1.5 million metric tons with a basic hull structure of tritanium/duranium. Built at Earth Station McKinley and launched on Stardate 48038.5. Commanded by Captain Kathryn Janeway."
+
+"SOLO MATCH TYPES"
+"LEVELS %d - %d"
+"SKILL LEVEL"
+"POINT LIMIT"
+"HUMAN"
+"PLAYERS"
+
+"ACCESSING . . ."
+"HOLOGRAPHIC CHARACTERS : %d - %d"
+"SAFE"
+"BEST"
+"MODELS"
+"CD KEY"
+
+"Awaiting challenge"
+"Awaiting authorization"
+"Awaiting connection"
+"Awaiting gamestate..."
+
+"FRANCAIS"
+"NO MAPS FOUND"
+"ADVANCED SERVER SETTINGS"
+
+"ERROR"
+"Must be between 1 and 60"
+"Must be between 0 and 64"
+"Must be between 150 and 1000"
+"Must be between 0 and 5000"
+"Must be between 0 and 10000"
+"Must be between 0 and 100"
+"Must be between 0 and MAX CLIENTS"
+
+"HOLODECK 1"
+"WELCOME..."
+
+"Bat'leth Workout"
+"Captain Proton"
+"A Christmas Carol"
+"Day of Honor"
+"Don Carlo"
+"Flotter"
+"French Resistance"
+"Golf"
+"Grease Monkey"
+"Insurrection Alpha"
+"Klingon Battle"
+"Ktarian Moonrise"
+"Medical Consultant"
+"Orbital Skydiving"
+"Socialization"
+"Torres 2-1-6"
+"Torres Zeta-1"
+"Velocity"
+
+"HOLOMATCH"
+
+"TM, (R) and (C) 2001 Paramount Pictures, Inc. All rights reserved.  Star Trek: Voyager and related elements are trademarks of Paramount Pictures."
+"This product contains software technology licensed from Id Software, Inc. Id Technology (C) 1999-2001 Id Software, Inc. All rights reserved."
+"LEAVING HOLOMATCH"
+
+"OR"
+
+"ELITE FORCE HOLOMATCH : CONFIRMATION"
+"CONFIRMATION"
+"RESTART HOLOMATCH?"
+"INTERNET2"
+"INTERNET3"
+"INTERNET4"
+"INTERNET5"
+"Default value 5"
+"Default value 8"
+"Default value 250"
+"Default value 800"
+"Default value 500"
+"Default value 1"
+"Default value 0 (OFF)"
+
+"STAR TREK : VOYAGER - ELITE FORCE"
+"BY RAVEN SOFTWARE"
+"For more information visit www.ravensoft.com/eliteforce"
+
+"Press 'BACKSPACE' to clear."
+
+"Adjust brightness setting"
+"until symbol in box"
+"can barely be seen"
+
+"ELITE FORCE : INITIAL CONFIGURE"
+"INITIAL CONFIGURE"
+
+"Standard issue sidearm used by Federation away teams."
+"Powerful Federation weapon issued for dangerous missions."
+"Infinity Modulator : Anti-Borg weapon designed by Seven of Nine."
+"Developed by Scavenger culture during captivity by The Forge."
+"Living weapon created by the Etherian race."
+"Allows great accuracy and distance in launching a Federation grenade."
+"Hirogen weapon that utilizes phased tetryons."
+"Advanced Federation weapon capable of immense destruction."
+"Discovered by Hazard Team while on mission in abandoned Dreadnought Gunship."
+
+"ACCESSING VOYAGER LCARS . . ."
+"CLOSING VOYAGER LCARS . . ."
+
+"Insert the CD"
+"Bad CD Key"
+
+"Must be between 0 and 120"
+"Default value 0"
+
+"Must be between 0 and 30"
+"Default value 5"
+
+"Must be between 0 and 120"
+"Default value 0"
+
+"HOLODECK SIMULATION"
+"HOLOMATCH WEAPONRY"
+
+"BLUE"
+"RED"
+"SCREEN"
+"OF"
+
+"Downloading:"
+"Estimated time left:"
+"Transfer rate:"
+"estimating"
+"(%s of %s copied)"
+"(%s copied)"
+"%s/Sec"
+"ELITE FORCE HOLOMATCH : ADVANCED SETTINGS"
+"DO YOU WISH TO LEAVE CURRENT MATCH?"
+
+"FONTS (DEVELOPER ONLY)"
+"THIS WILL RESET THE MENU - CONTINUE?"
+
+"Brightness settings will not take affect"
+"until the 'ACCEPT' button has been activated."
+
+"Recommended Players"
+"Exit and lose video settings?"
+
+"Unpure client detected. Invalid .PK3 files referenced!"
+"Cannot validate pure client!"
+"You were kicked."
+"timed out"
+"server shut down"
+"disconnected"
+"broken download"
+"Server command overflow"
+"Lost reliable commands"
+"A3D not available."
+
+// NEW TEXT TO BE TRANSLATED - 03/13/01
+"No Class"
+"Infiltrator"
+"Sniper"
+"Heavy Weapons Specialist"
+"Demolitionist"
+"Medic"
+"Technician"
+// NEW TEXT TO BE TRANSLATED - 03/13/01
+"Borg"
+"USE INVENTORY"
+"USE OBJECT"
+"VIEW OBJECTIVES"
+"PARAMETERS"
+// NEW TEXT TO BE TRANSLATED - 03/13/01
+"Must be between 0 and 600"
+"Default value 120"
+"Must be a positive number"
+"Default value 180"
+"ACTION HERO"
+"V.I.P."
Index: baseef/ext_data/mp_buttontext2_deutsch.dat
===================================================================
--- baseef/ext_data/mp_buttontext2_deutsch.dat	(revision 0)
+++ baseef/ext_data/mp_buttontext2_deutsch.dat	(revision 42)
@@ -0,0 +1,351 @@
+
+"SOLO-MATCH"				"GEGEN HCs (HOLOGRAFISCHE CHARAKTERE) SPIELEN"
+"MULTI-MATCH"				"GEGEN HCs UND MENSCHEN SPIELEN"
+"KONFIGURIEREN"				"TASTENBELEGUNG"
+"DEMOS"					"DEMOS DER MEHRSPIELER-LEVEL SEHEN"
+"BEENDEN"				"SPIEL VERLASSEN"
+"MODIFIKATIONEN"					"SPIEL-MODIFIKATIONEN LADEN"
+
+// Generic Stuff
+"NEIN"					"NEIN"
+"JA"					"JA"
+
+// Demo Screen
+"HAUPTMENÜ"				"ZURÜCK ZUM HAUPTMENÜ"
+"STARTEN"				"DEMO STARTEN"
+"/"					"DEMO-NAME"
+
+
+"GRAFIK"				"GRAFIKEINSTELLUNGEN"
+"STEUERUNG"				"TASTEN- UND MAUS-KONFIGURATION"
+"SOUND/NETZWERK"			"SOUND- UND NETZWERKEINSTELLUNGEN"
+"SPIELOPTIONEN"				"SPIELOPTIONEN EINSTELLEN"
+"CD-KEY"				"CD-KEY EINGEBEN"
+"SPIELER"				"SPIELEREINSTELLUNGEN AKTUALISIEREN"
+"FONTS"					"VERFÜGBARE SCHRIFTARTEN ANZEIGEN"
+
+// Video Data
+"GRAFIKOPTIONEN"			"GRAFIKMODUS WÄHLEN"
+"GL-TREIBER"				"GL-TREIBER FESTLEGEN (VOODOO ODER STANDARD)"
+"GL-ERWEITERUNGEN"			"GL-ERWEITERUNGEN ZULASSEN (J/N)"
+"GRAFIKMODUS"				"AKTUELLER GRAFIKMODUS"
+"FARBTIEFE"				"16 ODER 32 BIT"
+"VOLLBILD"			"VOLLBILD- ODER FENSTERMODUS"
+"LICHT"				"LIGHTMAP ODER VERTEX"
+"GEOMETRIEDETAILS"		"GEOMETRIESTUFE"
+"TEXTURDETAILS"		"TEXTURSTUFE"
+"TEXTURQUALITÄT"		"TEXTURBITS"
+"TEXTURFILTER"			"BILINEAR ODER TRILINEAR"
+"ÜBERNEHMEN"			"ÄNDERUNGEN ÜBERNEHMEN"
+"GRAFIKDATEN"			"GRAFIKINFORMATION AKTUALISIEREN"
+"GRAFIKDATEN II"		"ZUSÄTZLICHE EINSTELLUNGEN"
+"TREIBERINFO"			"GRAFIKTREIBER-INFORMATION"
+
+//	Video 2 Data
+"HELLIGKEIT"			"HELLIGKEIT EINSTELLEN"
+"BILDSCHIRMGRÖSSE"		"BILDSCHIRMGRÖSSE EINSTELLEN"
+
+// Setup / Sound
+"EFFEKTLAUTSTÄRKE"			"LAUTSTÄRKE SPIELEFFEKTE"
+"MUSIKLAUTSTÄRKE"			"LAUTSTÄRKE SPIELMUSIK"
+"SPRACHLAUTSTÄRKE"			"LAUTSTÄRKE DER DIALOGE IM SPIEL"
+"SOUNDQUALITÄT"				"SOUNDQUALITÄT"
+"A3D"					"A3D-SOUND EIN/AUS"
+"SOUNDGERÄT"			"OPENAL SOUNDGERÄT WÄHLEN"
+
+"TASTENDRUCK ODER ESCAPE ZUM ABBRECHEN"	"/"
+
+"WAFFEN"				"WAFFENTASTEN KONFIGURIEREN"
+"ANGRIFF/UMSEHEN"			"TASTEN FÜR ANGRIFF UND UMSEHEN KONFIGIGURIEREN"
+"BEWEGUNG"				"BEWEGUNGSTASTEN KONFIGURIEREN"
+"KOMMENTARE"				"STEUERUNGSTASTEN KONFIGURIEREN"
+"MAUS/JOYSTICK"				"MAUS-/JOYSTICK-OPTIONEN EINSTELLEN"
+"WEITERE OPTIONEN"			"ZUSÄTZLICHE OPTIONEN"
+
+"EIN"						"EINSCHALTEN"
+"AUS"						"AUSSCHALTEN"
+
+// Player settings
+"HANDICAP"					"SPIELERHANDICAP FESTLEGEN"
+"NAME:"						"VERWENDETEN NAMEN EINGEBEN"
+
+// Game Options
+"TREFFERSPUREN"					"TREFFERSPUREN AN WÄNDEN"
+"SPUREN"					"/"
+"DYNAMISCHE LICHTER"				"DYNAMISCHE LICHTER EIN-/AUSSCHALTEN"
+"LICHTER"					"/"
+"LICHTSPIEGELUNGEN"					"LICHTSPIEGELUNGEN EIN-/AUSSCHALTEN"
+"SPIEGELUNGEN"					"/"
+"ZIELINFO"				"ZIELINFO EIN/AUS"
+"INFO"						"/"
+"BILDER SYNCHRONISIEREN"				"BILDSYNCHRONISATION EIN/AUS"
+"SYNC."					"/"
+"FADENKREUZ"				"FADENKREUZ EINSTELLEN"
+
+// Quit Game
+"JA"						"SPIEL VERLASSEN"
+"NEIN"						"ZURÜCK ZUM HAUPTMENÜ"
+
+// Single Player Server
+"ZURÜCKSETZEN"			"HOLOMATCH-STAND DES SPIELERS ZURÜCKSETZEN"
+"MATCH ERSTELLEN"			"SPIEL UND OPTIONEN FESTLEGEN"
+"VOREINGEST. MATCH"			"VOREINGESTELLTES MATCH STARTEN"
+"NÄCHSTE STUFE"				"KARTEN DER NÄCHSTEN STUFE EINSEHEN"
+"LETZTE STUFE"				"KARTEN DER LETZTEN STUFE EINSEHEN"
+"SPIELER ÄNDERN"		"SPIELERINFORMATION ÄNDERN"
+"START"					"VOREINGEST. HOLOMATCH STARTEN"
+"MATCH"					"/"
+"ABBRECHEN"				"ZURÜCK ZU DEN MATCH-OPTIONEN"
+"STARTEN"					"HOLOMATCH STARTEN"
+
+// Skill levels
+"KADETT"				"ANFÄNGER-SCHWIERIGKEIT"
+"FÄHNRICH"				"LEICHTE SCHWIERIGKEIT"
+"LIEUTENANT"				"MITTLERE SCHWIERIGKEIT"
+"COMMANDER"				"FORTGESCHRITTENE SCHWIERIGKEIT"
+"CAPTAIN"				"EXPERTEN-SCHWIERIGKEIT"
+
+// Multiplayer Server
+"SERVER"					"SUCHE NACH SERVERN"
+"SPIELTYP"				"SPIELTYP WÄHLEN"
+"SORT. NACH"				"SORTIERUNG DER SERVER"
+"VOLLE ZEIGEN"				"VOLLE SERVER IN LISTE ZEIGEN"
+"FREIE ZEIGEN"				"FREIE SERVER IN LISTE ZEIGEN"
+"UPDATE"				"SERVER IN LISTE AKTUALISIEREN"
+"ANHALTEN"				"HÄLT DIE SERVERSUCHE AN"
+
+"SPIELTYP"				"TYP DES SPIELS"
+
+
+"SERVERSUCHE"			"NACH SERVER SUCHEN"
+"SERVER ANGEBEN"		"BESTIMMTEN SERVER FINDEN"
+"SERVER ERSTELLEN"		"EIGENEN SERVER ERSTELLEN"
+
+"MITSPIELEN"					"SERVER ANSCHLIESSEN"
+"MODIFIKATION LADEN"					"MODIFIKATION LADEN"
+
+	// Single Player reset
+"JA"						"SPIELERVARIABLEN ZURÜCKSETZEN"
+"NEIN"						"VARIABLEN NICHT ZURÜCKSETZEN"
+
+"MODELL ÄNDERN"				"SPIELERMODELL ÄNDERN"
+
+	// Ingame menu
+"TEAM"						"ZUM TEAM-MENÜ"
+"HC HINZUFÜGEN"				"HOLOGRAFISCHE CHARAKTERE HINZUFÜGEN"
+"HC ENTFERNEN"				"HOLOGRAFISCHE CHARAKTERE ENTFERNEN"
+"TEAM-BEFEHLE"				"TEAM-BEFEHLE ERTEILEN"
+"IGNORES"				"IGNORIERTE NAMEN VERWALTEN"
+"KONFIGURIEREN"				"SPIELKONFIGURATION ÄNDERN"
+"SERVERDATEN"				"SERVER-INFORMATION ÄNDERN"
+"NEU STARTEN"			"HOLOMATCH VON VORN STARTEN"
+"MATCH FORTSETZEN"			"ZUM HOLOMATCH ZURÜCKKEHREN"
+"MATCH BEENDEN"				"AKTUELLES HOLOMATCH VERLASSEN"
+"PROGRAMM BEENDEN"			"STAR TREK: VOYAGER - ELITE FORCE BEENDEN"
+
+
+// Team menu
+"FÜR ROT SPIELEN"				"MIT ROTEM TEAM SPIELEN"
+"FÜR BLAU SPIELEN"				"MIT BLAUEM TEAM SPIELEN"
+"WIEDER MITSPIELEN"			"MATCH WIEDER SPIELEN"
+"ZUSCHAUER"				"ZUSCHAUER SEIN"
+"SPIELMENÜ"				"ZURÜCK ZUM HAUPTMENÜ"
+
+// Setup/ Controls/ Mouse Config
+"FREIES UMSEHEN"			"FREIES UMSEHEN EIN/AUS"
+"MAUSGESCHWINDIGKEIT"		"BEWEGUNGSGESCHWINDIGKEIT DER MAUS"
+"MAUS UMKEHREN"			"UMKEHREN DER STEUERUNG"
+"EMPFINDLICHE MAUS"		"EMPFINDLICHE MAUS (EIN/AUS)"
+"JOYSTICK"			"JOYSTICK VERWENDEN (EIN/AUS)"
+"JOYSTICK-EMPFINDL."		"EMPFINDLICHKEIT DES JOYSTICKS"
+"FORCE-FEEDBACK"		"JOYSTICK BENUTZT FORCE-FEEDBACK"
+
+"ZURÜCK"					"ZUM VORHERIGEN BILDSCHIRM"
+"SPIELERDATEN"				"NAME UND HANDICAP ÄNDERN"
+"/"					"NÄCHSTES MODELL ANSEHEN"
+"/"					"VORHERIGES MODELL ANSEHEN"
+
+// Ingame Quit Screen
+"NEIN"						"SPIEL NICHT VERLASSEN"
+"JA"						"SPIEL VERLASSEN; ZURÜCK ZUM DESKTOP"
+
+"CD-KEY"					"CD-KEY EINGEBEN"
+
+"EINZELSPIELER"			"ELITE FORCE: EINZELSPIELER-MODUS"
+"STANDARD"			"ALLE WERTE AUF DEN STANDARD ZURÜCKSETZEN"
+
+"NEIN"				"OPTIONEN NICHT ZURÜCKSETZEN"
+"JA"				"ALLE OPTIONEN AUF STANDARDKONFIGURATION ZURÜCKSETZEN"
+
+"DREHGESCHWINDIGKEIT"		"TASTEN-DREHGESCHWINDIGKEIT"
+"IMMER RENNEN"			"SPIELER IMMER IM RENNMODUS"
+"AUSGANGSBLICKRICHTUNG"			"AUSGANGSBLICKRICHTUNG"
+"AUT. WAFFENWECHSEL"		"WAFFEN OHNE MUNITION WECHSELN"
+
+"SPIELERMODELLE"		"ALLE TEILNEHMER BENUTZEN SELBES SPIELERMODELL"
+"TEAM-OVERLAYS"			"TEAM-OVERLAYS VERWENDEN"
+"AUTOM. DOWNLOAD"			"AUTOMATISCHER MODUS-DOWNLOAD"
+"EINFACHE OBJEKTE"		"EINFACHE OBJEKTE WERDEN SPRITES"
+
+"NETZWERK"			"NETZWERK-OPTIONEN EINSTELLEN"
+"DATENRATE"			"MODEM- ODER VERBINDUNGSGESCHWINDIGKEIT"
+
+"FAVORITEN HINZUFÜG."		"AKTUELLEN SERVER ZU FAVORITENLISTE HINZUFÜGEN"
+
+"/"				"VORHERIGE KARTENGRUPPE SEHEN"
+"/"				"NÄCHSTE KARTENGRUPPE SEHEN"
+
+"WEITER"			"SERVER ERSTELLEN"
+"PUNKTLIMIT:"			"MAXIMALE PUNKTZAHL"
+"CAPTURE-LIMIT:"			"MAXIMALES CAPTURE-LIMIT"
+"ZEITLIMIT:"			"ZUGELASSENE ZEIT"
+"TEAMFEUER"			"SCHIESSEN AUF KAMERADEN ZULASSEN?"
+"NUR SERVER"			"NUR SERVER STARTEN"
+"DEDIZIERTER SERVER"		"DEDIZIERTEN SERVER STARTEN"
+"HOSTNAME:"			"NAME DES SPIELSERVERS"
+"HC-STUFE"			"SPIELSTUFE DER HOLOCHARAKTERE"
+"1"				"SPIELERPLATZ 1"
+"2"				"SPIELERPLATZ 2"
+"3"				"SPIELERPLATZ 3"
+"4"				"SPIELERPLATZ 4"
+"5"				"SPIELERPLATZ 5"
+"6"				"SPIELERPLATZ 6"
+"7"				"SPIELERPLATZ 7"
+"8"				"SPIELERPLATZ 8"
+"9"				"SPIELERPLATZ 9"
+"10"				"SPIELERPLATZ 10"
+"11"				"SPIELERPLATZ 11"
+"12"				"SPIELERPLATZ 12"
+"KARTE ÄNDERN"			"ANDERE KARTE WÄHLEN"
+
+"/"				"VORHERIGEN HOLOCHARAKTER SEHEN"
+"/"				"NÄCHSTEN HOLOCHARAKTER SEHEN"
+"ANNEHMEN"			"DATEN BESTÄTIGEN"
+"TEAM:"				"TEAM"
+"KÖNNEN:"			"KÖNNEN DES HC"
+
+"ENTFERNEN"			"HOLOCHARAKTER ENTFERNEN"
+"HINZUFÜGEN"			"AUSGEWÄHLTEN SPIELER IGNORIEREN"
+"ENTFERNEN"			"IGNORE AUFHEBEN"
+"ALLE LÖSCHEN"			"ALLE IGNORES ENTFERNEN"
+
+"/"				"DATEN AUFWÄRTS SCROLLEN"
+"/"				"DATEN ABWÄRTS SCROLLEN"
+"ENTFERNEN"			"SERVER AUS LISTE ENTFERNEN"
+
+"ADRESSE"			"SERVERADRESSE"
+"PORT"				"SERVERPORT"
+
+"WIEDERHOLEN"				"/"
+"NÄCHSTES MATCH"			"/"
+
+"ZURÜCK"				"/"
+
+"SPRACHE"			"ÄNDERT DIE SPRACHE VON ELITE FORCE"
+
+"FÖDERATION"			"DATEN FÖDERATION"
+"CARDASSIA"			"DATEN CARDASSIANERIMPERIUM"
+"FERENGI-ALLIANZ"		"DATEN FERENGI-ALLIANZ"
+"ROMULANERIMPERIUM"		"DATEN ROMULANERIMPERIUM"
+"KLINGONENREICH"		"DATEN KLINGONENREICH"
+"DOMINION"			"DATEN DOMINION"
+"VOYAGER-STARTPUNKT"		"DATEN VOYAGER"
+"70.000 LICHTJAHRE"		"/"
+"BORG"				"DATEN BORG"
+"RAUM"				"/"
+"IDRANISCHES ENDE DES"		"DATEN BAJORANISCHES WURMLOCH"
+"BAJORANISCHEN WURMLOCHES"	"/"
+"GALAKTISCHER KERN"		"DATEN GALAKTISCHER KERN"
+
+"ALPHA-"			"DATEN ALPHA-QUADRANT"
+"BETA-"				"DATEN BETA-QUADRANT"
+"DELTA-"			"DATEN DELTA-QUADRANT"
+"GAMMA-"			"DATEN GAMMA-QUADRANT"
+"QUADRANT"			"/"
+
+"VORDERE PHASER"		"DATEN PHASER"
+"VORDERE"			"DATEN VORDERE TORPEDOS"
+"PHOTONEN-TORPEDO-"		"/"
+
+"WERFER"			"/"
+
+"VENTRALER PHASERSTREIFEN"	"DATEN VENTRALE PHASER"
+"MITTLERE HÜLLE"		"DATEN MITTLERER HÜLLEN-PHASER"
+"PHASERSTREIFEN"		"/"
+"BUSSARD-KOLLEKTOREN"		"DATEN BUSSARD-KOLLEKTOREN"
+"WARPGONDELN IN GESENKTER POSITION"	"DATEN WARPGONDELN"
+"RCS-MANÖVRIERANTRIEB"		"DATEN ANTRIEB"
+"U.S.S. VOYAGER"		"DATEN VOYAGER"
+"BRÜCKE"			"DATEN BRÜCKE"
+
+"SCREENSHOT"			"SCREENSHOT DES SPIELS ERSTELLEN"
+
+"STANDARD"			"STANDARDOBERFLÄCHE VERWENDEN"
+"ROT"				"ROTE OBERFLÄCHE VERWENDEN"
+"BLAU"				"BLAUE OBERFLÄCHE VERWENDEN"
+"LICHTSPIEGELUNGEN"		"EINSTELLUNG LICHTSPIEGELUNGEN"
+"ERWEITERT"			"ERWEITERTE SERVEREINSTELLUNGEN"
+"AUTO-TEAMANSCHLUSS"		"ERZWINGT AUTOM. TEAMANSCHLUSS"
+"AUTO-BALANCE"			"AUTOMATISCHE BALANCE DER SPIELERZAHL IN TEAMSPIELEN"
+"MAX. SPIELER"			"IM SPIEL GESTATTETE MAXIM. SPIELERZAHL/HCs"
+"FALLSCHÄDEN"			"FALLSCHÄDEN EIN/AUS"
+"WAFFENNACHSCHUB"		"ANZAHL DER SEKUNDEN, BIS WAFFEN WIEDER ERSCHEINEN"
+"LAUFGESCHWINDIGKEIT"			"LAUFGESCHWINDIGKEIT DER SPIELER"
+"SCHWERKRAFT"			"SCHWERKRAFT IM SPIEL"
+"TREFFERWIRKUNG"			"GRAD DER SPIELERBEWEGUNG VERURSACHT DURCH TREFFER"
+"SCHADENSVERSTÄRKER"		"SCHADENSMULTIPLIKATOR UM DIESEN FAKTOR"
+
+"EINFACHE SCHATTIERUNG"		"EINFACHE SCHATTIERUNG FÜR ÄLTERE GRAFIKKARTEN"
+"MINIM. SPIELERZAHL"		"HINZUGEFÜGTE/ENTFERNTE HOLOCHARAKTERE FÜR MINDESTZAHL PRO TEAM"
+
+"PHASER"			"DATEN ÜBER PHASER"
+"KOMPRESSIONSGEW."		"DATEN ÜBER KOMPRESSIONSGEWEHR"
+"U-MOD"				"DATEN ÜBER U-MOD"
+"SCAVENGERGEWEHR"		"DATEN ÜBER SCAVENGERGEWEHR"
+"STASISWAFFE"			"DATEN ÜBER STASISWAFFE"
+"GRANATKANONE"			"DATEN ÜBER GRANATKANONE"
+"TETRYON-DISRUPTOR"		"DATEN ÜBER TETRYON-PULSDISRUPTOR"
+"PHOTONENSTOSS"			"DATEN ÜBER PHOTONENSTOSS"
+"BOGENSCHWEISSER"		"DATEN ÜBER BOGENSCHWEISSER"
+
+"ANISOTROPIC-FILTER"		"FILTER EIN/AUS"
+"KOMPRIMIERTE TEXTUREN"		"KOMPRIMIERTE TEXTUREN EIN/AUS"
+
+"OBJEKTNACHSCHUB"		"STIMMT NACHSCHUB-ZEITEN AUF DIE SPIELERZAHL AB"
+"HOLODECK-INTRO"		"HOLODECK-TÜREN ZU ANFANG JEDES LEVELS EIN/AUS"
+"SPIELER-WIEDEREINTRITT"		"SEKUNDEN BIS ZUM WIEDEREINTRITT. 0 = ENDLOS"
+"WIEDEREINTRITT: UNVERWUNDBARKEIT"	"SEKUNDEN, DIE DER SPIELER BEIM WIEDEREINTRITT UNVERWUNDBAR IST"
+"WARMUP"			"SEKUNDEN, DIE SPIELER AUF ANDERE SPIELER WARTET"
+
+"GRUPPE BLAUES TEAM"		"FESTGESETZTE GRUPPE FÜR BLAUES TEAM"
+"GRUPPE ROTES TEAM"		"FESTGESETZTE GRUPPE FÜR ROTES TEAM"
+ 
+"TEXT"				"SPRACHE DER BILDSCHIRMTEXTE"
+"DIALOGE"				"SPRACHE DER DIALOGE"
+"ZURÜCKSETZEN"			"KARTENERGEBNISSE ZURÜCKSETZEN"
+"TEAM"				"TEAM-FILTER"
+
+"SPÄTER EINGEBEN"		"GEBEN SIE DEN CD-KEY SPÄTER IM MENÜ STEUERUNG EIN"
+
+"KLEIN"				"KLEINE SCHRIFTART ANZEIGEN"
+"MITTEL"			"MITTLERE SCHRIFTART ANZEIGEN"
+"GROSS"				"GROSSE SCHRIFTART ANZEIGEN"
+"DRAHTGITTER"			"DRAHTGITTERCHARAKTERE SEHEN"
+"TASTATUR"			"TASTATURBELEGUNG"
+
+// NEW OR CHANGED TEXT TO BE TRANSLATED - 03/13/01
+"X-ACHSE"			"ANALOGE X-ACHSE DES JOYSTICKS"
+"Y-ACHSE"			"ANALOGE Y-ACHSE DES JOYSTICKS"
+"ASSIMILATION"			"GETROFFENE SPIELER WECHSELN IN GEGNERISCHES TEAM"
+"SPEZIALIST"			"SPIELER MUSS SPIELERKLASSE WÄHLEN"
+"DESINTEGRATION"		"EIN DIREKTER TREFFER VERURSACHT DEN SOFORTIGEN TOD"
+"ACTION-HELD"			"EIN SPIELER ERHÄLT ALLE WAFFEN UND RÜSTUNGEN"
+"ELIMINATION"			"LETZER MANN GEWINNT"
+"KLASSE"				"SPIELERKLASSE"
+"TEAM/KLASSE"			"WÄHLEN SIE TEAM UND SPIELERKLASSE"
+"AUTO-TEAMWAHL"			"SPIELER SCHLIESST SICH DEM TEAM AN, DAS SPIELER DRINGENDER BENÖTIGT"
+"AUSZEIT BEI EINSTIEG"		"AUSZEIT BEI ASSIMILATION UND ELIMINATION"
+"AUSZEIT BEI KLASSENWECHSEL"	"AUSZEIT VOR DEM KLASSENWECHSEL"
+
+// TS 10.12.2001
+"HOST MOTD :"		"NACHRICHT DES TAGES WAEHREND DES VERBINDUNGSAUFBAUS"
Index: baseef/ext_data/mp_buttontext2.dat
===================================================================
--- baseef/ext_data/mp_buttontext2.dat	(revision 0)
+++ baseef/ext_data/mp_buttontext2.dat	(revision 42)
@@ -0,0 +1,351 @@
+
+"SOLO MATCH"				"PLAY AGAINST HC'S (HOLOGRAPHIC CHARACTERS)"
+"MULTI MATCH"				"PLAY AGAINST HC'S AND HUMANS"
+"CONFIGURE"				"SET KEY BINDINGS"
+"DEMOS"					"VIEW DEMOS OF MULTI-PLAYER LEVELS"
+"QUIT"					"LEAVE GAME"
+"MODS"					"LOAD GAME MODIFICATIONS"
+
+// Generic Stuff
+"NO"					"NO"
+"YES"					"YES"
+
+// Demo Screen
+"MAIN MENU"				"RETURN TO MAIN MENU."
+"ENGAGE"				"ACTIVATE DEMO"
+"/"					"DEMO NAME"
+
+
+"VIDEO"					"VIDEO SETTINGS"
+"CONTROLS"				"SET KEY BINDINGS AND MOUSE CONFIGURATION."
+"SOUND/NETWORK"				"SOUND AND NETWORK SETTINGS"
+"GAME OPTIONS"				"SET GAME OPTIONS"
+"CD KEY"				"INPUT CD KEY VALUE"
+"PLAYER"				"UPDATE PLAYER SETTINGS"
+"FONTS"					"VIEW CURRENT FONTS AVAILABLE"
+
+// Video Data
+"VIDEO OPTIONS"				"CHOOSE GROUP VIDEO MODE SETTINGS"
+"GL DRIVER"				"SET GL DRIVER (VOODOO or DEFAULT)"
+"GL EXTENSIONS"				"ALLOW GL EXTENSIONS (Y/N)"
+"VIDEO MODE"				"CURRENT VIDEO MODE"
+"COLOR DEPTH"				"16 OR 32 BITS"
+"FULL SCREEN"				"RUN IN FULL SCREEN OR WINDOWED MODE"
+"LIGHTING"				"LIGHTMAP OR VERTEX"
+"GEOMETRIC DETAIL"			"LEVEL OF GEOMETRIC DETAIL"
+"TEXTURE DETAIL"			"LEVEL OF TEXTURE DETAIL"
+"TEXTURE QUALITY"			"LEVEL OF TEXTURE BITS"
+"TEXTURE FILTER"			"BILINEAR OR TRILINEAR"
+"APPLY CHANGES"				"APPLY ANY CHANGES MADE NOW"
+"VIDEO DATA"				"UPDATE VIDEO INFORMATION"
+"VIDEO ADDITIONAL"			"UPDATE ADDITIONAL VIDEO INFORMATION"
+"DRIVER INFO"				"VIDEO DRIVER INFORMATION"
+
+//	Video 2 Data
+"BRIGHTNESS"				"SET LEVEL OF BRIGHTNESS IN GAME"
+"SCREEN SIZE"				"SET SIZE OF PLAYABLE SCREEN"
+
+// Setup / Sound
+"EFFECTS VOLUME"			"VOLUME FOR GAME EFFECTS."
+"MUSIC VOLUME"				"VOLUME FOR GAME MUSIC."
+"VOICE VOLUME"				"VOLUME FOR VOICES IN GAME."
+"SOUND QUALITY"				"SOUND QUALITY."
+"A3D"					"A3D SOUND ON/OFF."
+"SOUND DEVICE"				"SELECT AN OPENAL SOUND DEVICE"
+
+"WAITING FOR KEY OR ESCAPE TO CANCEL"	"/"
+
+"WEAPONS"				"CONFIGURE WEAPON KEYS"
+"ATTACK/LOOK"				"CONFIGURE ATTACK/LOOK KEYS"
+"MOVEMENT"				"CONFIGURE MOVEMENT KEYS"
+"REPLY"					"CONFIGURE COMMAND KEYS"
+"MOUSE/JOYSTICK"			"SET MOUSE AND JOYSTICK OPTIONS"
+"OTHER OPTIONS"				"ADDITIONAL OPTIONS"
+
+"ON"						"TURN ON"
+"OFF"						"TURN OFF"
+
+// Player settings
+"HANDICAP"					"SET PLAYER HANDICAP"
+"NAME"						"SET NAME USED IN GAME"
+
+// Game Options
+"WALL MARKS"					"DAMAGE MARKS ON WALLS"
+"MARKS"					"/"
+"DYNAMIC LIGHTS"				"TURN ON/OFF DYNAMIC LIGHTS"
+"LIGHTS"					"/"
+"LIGHT"					"TURN ON/OFF LIGHT FLARES"
+"FLARES"					"/"
+"IDENTIFY TARGET"				"TURN ON/OFF TARGET IDENTIFIER"
+"TARGET"					"/"
+"SYNC EVERY FRAME"				"TURN ON/OFF FRAME SYNC"
+"FRAME"					"/"
+"CROSSHAIR"				"SET GAME CROSSHAIR"
+
+// Quit Game
+"YES"						"LEAVE GAME"
+"NO"						"RETURN TO MAIN MENU."
+
+// Single Player Server
+"RESET STANDINGS"			"RESET PLAYER'S HOLOMATCH STANDINGS"
+"CREATE MATCH"				"CREATE MATCH AND SET THE OPTIONS"
+"PRESET MATCH"				"START A MATCH WITH PRESET OPTIONS"
+"NEXT GRADE"				"VIEW NEXT GRADE MAPS"
+"PREV GRADE"				"VIEW PREVIOUS GRADE MAPS"
+"CHANGE PLAYER"			"CHANGE PLAYER INFORMATION"
+"START"					"BEGIN PRESET HOLOMATCH"
+"MATCH"					"/"
+"ABORT"					"RETURN TO MATCH SETTINGS"
+"ENGAGE"					"START HOLOMATCH"
+
+// Skill levels
+"CADET"					"BEGINNERS SKILL LEVEL"
+"ENSIGN"				"EASY SKILL LEVEL"
+"LIEUTENANT"				"MEDIUM SKILL LEVEL"
+"COMMANDER"				"ADVANCED SKILL LEVEL"
+"CAPTAIN"				"EXPERT SKILL LEVEL"
+
+// Multiplayer Server
+"SERVERS"					"LOOK FOR SERVERS"
+"GAME TYPE"				"TYPE OF GAME TO PLAYER"
+"SORT BY"					"METHOD OF SORTING SERVERS"
+"SHOW FULL"				"SHOW FULL SERVERS IN LIST"
+"SHOW EMPTY"				"SHOW EMPTY SERVERS IN LIST"
+"REFRESH"					"REFRESH SERVER IN LIST"
+"STOP"						"STOPS THE SEARCH FOR SERVERS"
+
+"GAME TYPE"				"TYPE OF GAME PLAY"
+
+
+"SEARCH FOR SERVER"		"SEARCH FOR A SERVER"
+"SPECIFY SERVER"			"FIND A SPECIFIC SERVER"
+"CREATE SERVER"			"CREATE YOUR OWN SERVER"
+
+"ENGAGE"					"JOIN CHOSEN SERVER"
+"LOAD MOD"					"LOAD MODIFICATION"
+
+	// Single Player reset
+"YES"						"RESET PLAYER VARIABLES"
+"NO"						"DO NOT RESET PLAYER VARIABLES"
+
+"CHANGE MODEL"				"CHANGE PLAYER MODEL"
+
+	// Ingame menu
+"TEAM"						"GO TO TEAM MENU"
+"ADD HC'S"				"ADD HOLOGRAPHIC CHARACTERS TO HOLOMATCH"
+"REMOVE HC'S"				"REMOVE HOLOGRAPHIC CHARACTERS FROM HOLOMATCH"
+"TEAM ORDERS"				"GIVE TEAM ORDERS"
+"IGNORES"				"MANAGE IGNORED NAMES"
+"CONFIGURE"				"CHANGE GAME CONFIGURATION"
+"SERVER DATA"				"CHANGE SERVER INFORMATION"
+"RESTART MATCH"				"START HOLOMATCH OVER AGAIN."
+"RESUME MATCH"				"RETURN TO CURRENT HOLOMATCH"
+"LEAVE MATCH"				"QUIT OUT OF CURRENT HOLOMATCH"
+"EXIT PROGRAM"				"LEAVE STAR TREK : VOYAGER - ELITE FORCE."
+
+
+// Team menu
+"JOIN RED"				"JOIN RED HOLOMATCH TEAM."
+"JOIN BLUE"				"JOIN BLUE HOLOMATCH TEAM."
+"REJOIN MATCH"				"REJOIN MATCH IN PLAY."
+"SPECTATOR"				"BECOME A SPECTATOR."
+"INGAME MENU"				"RETURN TO INGAME MAIN MENU."
+
+// Setup/ Controls/ Mouse Config
+"FREE LOOK"				"FREE LOOK ON/OFF"
+"MOUSE SPEED"				"SPEED MOUSE MOVES ACROSS SCREEN."
+"INVERT MOUSE"				"WHEN ON, PULLING MOUSE BACK LIFTS VIEW IN GAME."
+"SMOOTH MOUSE"				"SMOOTH MOUSE (ON/OFF)"
+"ENABLE JOYSTICK"			"ENABLE JOYSTICK (ON/OFF)"
+"JOYSTICK THRESHOLD"		"THRESHOLD OF JOYSTICK"
+"FORCE FEEDBACK"			"JOYSTICK USES FORCEFEEDBACK"
+
+"BACK"						"BACK UP ONE SCREEN"
+"PLAYER DATA"				"CHANGE NAME AND HANDICAP"
+"/"					"VIEW NEXT PAGE OF MODELS"
+"/"					"VIEW PREVIOUS PAGE OF MODELS"
+
+// Ingame Quit Screen
+"NO"						"DO NOT QUIT GAME"
+"YES"						"QUIT GAME AND RETURN TO DESKTOP"
+
+"CD KEY"					"ENTER CD KEY"
+
+"SINGLE PLAYER"				"PLAY ELITE FORCE SINGLE PLAYER"
+"DEFAULT SETTINGS"		"RESETS EVERYTHING TO ORIGINAL CONFIGURATION"
+
+"NO"				"DO NOT RESET OPTIONS"
+"YES"				"SET ALL OPTIONS TO DEFAULT CONFIGURATION"
+
+"KEY TURN SPEED"		"KEY TURN SPEED"
+"ALWAYS RUN"			"PLAYER ALWAYS IN RUN MODE"
+"LOOK SPRING"			"LOOK SPRING"
+"AUTOSWITCH WEAPONS"		"AUTOSWITCH WEAPONS WHEN OUT OF AMMO"
+
+"FORCE PLAYER MODELS"		"ALL PARTICIPANTS USE THE SAME PLAYER MODEL"
+"DRAW TEAM OVERLAY"		"DRAW THE TEAM OVERLAY"
+"AUTO DOWNLOADING"		"AUTOMATIC DOWNLOADING OF MODS"
+"SIMPLE ITEMS"			"MODEL ITEMS BECOME SPRITES"
+
+"NETWORK"			"SET NETWORK OPTIONS"
+"DATA RATE"			"SPEED OF MODEM OR CONNECTION"
+
+"ADD TO FAVORITES"		"ADD CURRENT SERVER TO LIST OF FAVORITES"
+
+"/"				"VIEW PREVIOUS GROUP OF MAPS"
+"/"				"VIEW NEXT GROUP OF MAPS"
+
+"CONTINUE"			"CREATE THE SERVER"
+"POINT LIMIT :"			"MAXIMUM NUMBER OF POINTS"
+"CAPTURE LIMIT :"		"MAXIMUM NUMBER OF CAPTURES"
+"TIME LIMIT :"			"AMOUNT OF TIME ALLOWED"
+"FRIENDLY FIRE"			"SHOOTING TEAMMATES ALLOWED?"
+"PURE SERVER"			"RUNNING PURE SERVER"
+"DEDICATED SERVER"		"RUNNING A DEDICATED SERVER"
+"HOST NAME :"			"NAME OF SERVER RUNNING GAME"
+"HC SKILL"			"HOLOGRAPHIC CHARACTER SKILL"
+"1"				"PLAYER SLOT 1"
+"2"				"PLAYER SLOT 2"
+"3"				"PLAYER SLOT 3"
+"4"				"PLAYER SLOT 4"
+"5"				"PLAYER SLOT 5"
+"6"				"PLAYER SLOT 6"
+"7"				"PLAYER SLOT 7"
+"8"				"PLAYER SLOT 8"
+"9"				"PLAYER SLOT 9"
+"10"				"PLAYER SLOT 10"
+"11"				"PLAYER SLOT 11"
+"12"				"PLAYER SLOT 12"
+"CHANGE MAP"			"CHOOSE A DIFFERENT MAP"
+
+"/"				"VIEW PREVIOUS HOLOCHARACTERS"
+"/"				"VIEW NEXT HOLOCHARACTERS"
+"ACCEPT"			"ACCEPT DATA"
+"TEAM :"			"TEAM"
+"SKILL:"			"SKILL OF HC"
+
+"REMOVE"			"REMOVE HOLOGRAPHIC CHARACTER"
+"ADD"				"IGNORE SELECTED PLAYER"
+"REMOVE"			"REMOVE IGNORE"
+"CLEAR"				"REMOVE ALL IGNORES"
+
+"/"				"SCROLL UP THROUGH DATA"
+"/"				"SCROLL DOWN THROUGH DATA"
+"REMOVE"			"REMOVE SERVER FROM LIST"
+
+"ADDRESS"			"ADDRESS OF SERVER"
+"PORT"				"PORT OF SERVER"
+
+"REPLAY"			"/"
+"NEXT MATCH"			"/"
+
+"BACK"				"/"
+
+"LANGUAGE"			"CHANGE THE LANGUAGE OF ELITE FORCE"
+
+"FEDERATION"			"DATA ON THE FEDERATION"
+"CARDASSIA"			"DATA ON THE CARDASSIAN EMPIRE"
+"FERENGI ALLIANCE"		"DATA ON THE FERENGI ALLIANCE"
+"ROMULAN EMPIRE"		"DATA ON THE ROMULAN EMPIRE"
+"KLINGON EMPIRE"		"DATA ON THE KLINGON EMPIRE"
+"DOMINION"			"DATA ON THE DOMINION"
+"VOYAGER STARTING POINT"	"DATA ON VOYAGER"
+"70,000 LIGHT YEARS"		"/"
+"BORG"				"DATA ON THE BORG"
+"SPACE"				"/"
+"IDRAN END OF"			"DATA ON BAJORAN WORMHOLE"
+"BAJORAN WORMHOLE"		"/"
+"GALACTIC CORE"			"DATA ON THE GALACTIC CORE"
+
+"ALPHA"				"DATA ON THE ALPHA QUADRANT"
+"BETA"				"DATA ON THE BETA QUADRANT"
+"DELTA"				"DATA ON THE DELTA QUADRANT"
+"GAMMA"				"DATA ON THE GAMMA QUADRANT"
+"QUADRANT"			"/"
+
+"FORWARD PHASER"		"DATA ON FORWARD PHASERS"
+"FORWARD"			"DATA ON FORWARD TORPEDOS"
+"PHOTON TORPEDO"		"/"
+
+"LAUNCHERS"			"/"
+
+"VENTRAL PHASER STRIP"		"DATA ON VENTRAL PHASER"
+"MID-HULL"			"DATA ON MID-HULL PHASER"
+"PHASER STRIP"			"/"
+"BUSSARD COLLECTORS"		"DATA ON BUSSARD COLLECTORS"
+"WARP NACELLES IN LOWERED POSITION"	"DATA ON WARP NACELLES"
+"RCS (MANEUVERING) THRUSTERS"		"DATA ON THRUSTERS"
+"U.S.S. VOYAGER"		"DATA ON VOYAGER"
+"BRIDGE"			"DATA ON THE BRIDGE"
+
+"SCREENSHOT"			"TAKE SCREEN SHOT OF CURRENT GAME"
+
+"DEFAULT"			"DISPLAY DEFAULT VERSION OF SKINS"
+"RED"				"DISPLAY RED VERSION OF SKINS"
+"BLUE"				"DISPLAY BLUE VERSION OF SKINS"
+"LIGHT FLARES"			"LIGHTS FLARES SETTING"
+"ADVANCED"			"ADVANCED SERVER SETTINGS"
+"AUTO JOIN TEAM"		"FORCE AUTOMATIC JOINING IN TEAM GAMES"
+"AUTO BALANCE"			"AUTOMATICALLY BALANCE NUMBER OF PLAYERS IN TEAM GAMES"
+"MAX CLIENTS"			"MAXIMUM NUMBER OF PLAYERS/HCs ALLOWED IN GAME"
+"FALLING DAMAGE"		"TURN ON/OFF FALLING DAMAGE"
+"WEAPON RESPAWN"		"NUBMER OF SECONDS UNTIL WEAPONS RESPAWN"
+"RUN SPEED"			"PLAYERS RUN SPEED"
+"GRAVITY"			"GRAVITY IN GAME"
+"KNOCKBACK"			"AMOUNT PLAYERS ARE MOVED BY BEING DAMAGED"
+"DAMAGE MULTIPLIER"		"MULTIPLIES ALL DAMAGE IN THE GAME BY THIS AMOUNT"
+
+"SIMPLE SHADERS"		"SIMPLER SHADERS FOR OLDER VIDEO CARDS"
+"MINIMUM PLAYERS"		"HOLO CHARACTERS ADDED/REMOVED TO MATCH THIS NUMBER (PER TEAM)"
+
+"PHASER"			"VIEW PHASER DATA"
+"RIFLE"				"VIEW COMPRESSION RIFLE DATA"
+"I-MOD"				"VIEW I-MOD DATA"
+"SCAVENGER RIFLE"		"VIEW SCAVENGER RIFLE DATA"
+"STASIS"			"VIEW STASIS WEAPON DATA"
+"GRENADE LAUNCHER"		"VIEW GRENADE LAUNCHER DATA"
+"TETRYON DISRUPTOR"		"VIEW TETRYON WEAPON DATA"
+"PHOTON BURST"			"VIEW PHOTON BURST DATA"
+"ARC WELDER"			"VIEW ARC WELDER DATA"
+
+"ANISOTROPIC FILTERING"		"TURN FILTER ON OR OFF"
+"COMPRESSED TEXTURES"		"TURN COMPRESSED TEXTURES ON OR OFF"
+
+"ADJUST ITEM RESPAWN"		"FORCES RESPAWN TIMES TO ADJUST TO NUMBER OF PLAYERS"
+"HOLODECK INTRO"		"TURN ON/OFF HOLODECK DOORS AT BEGINNING OF LEVEL"
+"FORCE PLAYER RESPAWN"		"SECONDS PLAYER CAN WAIT BEFORE RESPAWNING. 0 = FOREVER."
+"RESPAWN INVULNERABILITY"	"SECONDS PLAYER IS INVULNERABLE UPON RESPAWNING."
+"WARMUP"			"SECONDS PLAYERS WAIT FOR OTHER PLAYERS TO CONNECT."
+
+"BLUE TEAM GROUP"		"FORCED GROUP FOR BLUE TEAM"
+"RED TEAM GROUP"		"FORCED GROUP FOR RED TEAM"
+ 
+"TEXT"				"LANGUAGE FOR ON SCREEN TEXT"
+"VOICE"				"LANGUAGE FOR VOICES"
+"RESET PROGRESS"		"REMOVE MAP STANDINGS"
+"TEAM"				"TEAM FILTER"
+
+"INPUT KEY LATER"		"INPUT CD KEY LATER FROM THE CONFIGURE MENU"
+
+"SMALL"				"VIEW SMALL FONT"
+"MEDIUM"			"VIEW MEDIUM FONT"
+"LARGE"				"VIEW LARGE FONT"
+"GRID"				"VIEW GRID CHARACTERS"
+"KEYBOARD"			"KEYBOARD LAYOUT"
+
+// NEW OR CHANGED TEXT TO BE TRANSLATED - 03/13/01
+"X AXIS"		"ANALOG JOYSTICK X AXIS"
+"Y AXIS"		"ANALOG JOYSTICK X AXIS"
+"ASSIMILATION"			"KILLED PLAYERS JOIN ENEMY TEAM"
+"SPECIALTIES"			"PLAYER MUST CHOOSE PLAYER CLASS"
+"DISINTEGRATION"		"ONE DIRECT HIT CAUSES INSTANT DEATH"
+"ACTION HERO"			"ONE RANDOM PLAYER GETS ALL WEAPONS AND ARMOR"
+"ELIMINATION"			"LAST MAN STANDING WINS"
+"CLASS"				"PLAYER CLASS"
+"TEAM/CLASS"			"CHOOSE TEAM AND PLAYER CLASS"
+"AUTO ASSIGN TEAM"		"WILL PLACED ON THE TEAM MOST IN NEED OF A PLAYER"
+"NO JOIN TIME OUT"		"USED IN ASSIMILATION AND ELIMINATION"
+"CLASS CHANGE TIME OUT"		"AMOUNT OF TIME ALLOWED BEFORE CHANGING CLASSES"
+
+// TS 10.12.2001
+"HOST MOTD :"		"MESSAGE OF THE DAY DURING CONNECTION BUILDUP"
Index: baseef/ext_data/mp_normaltext2_francais.dat
===================================================================
--- baseef/ext_data/mp_normaltext2_francais.dat	(revision 0)
+++ baseef/ext_data/mp_normaltext2_francais.dat	(revision 42)
@@ -0,0 +1,569 @@
+
+"ELITE FORCE HOLOMATCH : MENU PRINC."
+"ELITE FORCE HOLOMATCH : CLE CD"
+"ELITE FORCE HOLOMATCH : DEMOS"
+"ELITE FORCE HOLOMATCH : CONFIG."
+"ELITE FORCE HOLOMATCH : MATCH SOLO"
+"ELITE FORCE HOLOMATCH : MATCH MULTI"
+"ELITE FORCE HOLOMATCH : MODIF."
+"ELITE FORCE HOLOMATCH : QUITTER MENU"
+"ELITE FORCE HOLOMATCH : MENU INTERFACE"
+"ELITE FORCE HOLOMATCH : MENU EQUIPE"
+
+// Ingame Menu
+"MENU INTERFACE"
+
+// Team Menu
+"MENU EQUIPE"
+
+// Demos Screen
+"DEMONSTRATIONS"
+"FICHIER ACT."
+"DEMOS DISPONIBLES"
+
+// Main Menu
+"ALPHA"
+"CARTOGRAPHIE STELLAIRE"
+"FEDERATION DES PLANETES UNIES, FONDEE EN 2161. PLANETE CAPITALE : TERRE."
+"TREVE AVEC LA FEDERATION EN 2367. PLANETE CAPITALE : CARDASSIA 1."
+"CIVILISATION PROFONDEMENT CAPITALISTE. PLANETE CAPITALE : FERENGINAR."
+"REJETON DE LA CULTURE VULCAINE. PLANETES CAPITALES : ROMULUS ET REMUS."
+"PREMIER CONTACT AVEC LA FEDERATION EN 2218. PLANETE CAPITALE : QO'NOS."
+"PUISSANTE ALLIANCE DE GROUPES PLANETAIRES DU QUADRANT GAMMA."
+"NCC-74656, VAISSEAU DE CLASSE INTREPIDE, ACTUELLEMENT DE RETOUR DU QUADRANT DELTA."
+"RACE CYBORG, INTRODUITE A LA FEDERATION PAR L'ENTITE NOMMEE 'Q'"
+"COULOIR ARTIFICIEL DE 70 000 ANNEES-LUMIERE RELIANT BAJOR AU QUADRANT GAMMA "
+"CENTRE DE LA VOIE LACTEE, EMPLACEMENT SUPPOSE DU SHA KA REE."
+"QUART DE LA VOIE LACTEE, OCCUPE PAR LA FEDERATION DES PLANETES UNIES."
+"QUART DE LA VOIE LACTEE, OCCUPE PAR LES EMPIRES KLINGON ET ROMULIEN."
+"QUART DE LA VOIE LACTEE, INCONNU, TERRITOIRE SUPPOSE DES BORGS."
+"QUART DE LA VOIE LACTEE, UTILISATION DU VORTEX BAJORAN POUR EXPLORATION."
+
+// Video Setup Menu
+"CONFIG. VIDEO"
+"HAUTE QUALITE"
+"NORMAL"
+"RAPIDE"
+"PLUS RAP."
+"PERSO."
+"DEFAUT"
+"VOODOO"
+"OFF"
+"ON"
+"320X240"
+"400X300"
+"512X384"
+"640X480"
+"800X600"
+"960X720"
+"1024x768"
+"1152x864"
+"1280x1024"
+"1600x1200"
+"2048x1536"
+"856x480 Plein écran"
+"DEFAUT"
+"16 BITS"
+"32 BITS"
+"ECLAIR. DYNA."
+"VERTEX"
+"BAS"
+"MOYEN"
+"HAUT"
+"TRES HAUT"
+"BILINEAIRE"
+"TRILINEAIRE"
+
+// Player setup
+"ELITE FORCE HOLOMATCH : CHANGER JOUEUR"
+"CONFIG. JOUEUR"
+"AUCUN"
+"95"
+"90"
+"85"
+"80"
+"75"
+"70"
+"65"
+"60"
+"55"
+"50"
+"45"
+"40"
+"35"
+"30"
+"25"
+"20"
+"15"
+"10"
+"5"
+
+// Video Driver Menu
+"PILOTE VIDEO"
+"PILOTES VIDEO"
+"VENDEUR : "
+"VERSION : "
+"CARTE : "
+"FORMAT PIXEL : "
+"EXTENSIONS : "
+
+// Setup / Controls / Weapons
+"CONFIG. TOUCHES ARMES"
+
+// Sound Menu
+"CONFIG. SON"
+"OPENAL"
+
+// Game Options
+"AUCUN"
+"CONFIG OPTIONS JEU "
+
+// Quit screen
+"SYST. VAISSEAU"
+"QUITTER ELITE FORCE ? "
+
+	// Multiplayer Server
+"LOCAL"
+"MULTI"
+"INTERNET1"
+"FAVORIS"
+"TOUS"
+"OUVERT A TOUS"
+"HOLO PAR EQUIPE"
+"TOURNOI"
+"CAPTURE DRAPEAU"
+
+"NOM SERVEUR"
+"NOM DE NIVEAU"
+"PORTS JOUEUR OUVERTS"
+"TYPE JEU"
+"TEMPS PING "
+
+"CHERC. SERVEUR"
+"CREER SERVEUR"
+"SPECIF. SERVEUR"
+
+//	Specify server
+"ADRESSE"
+"PORT"
+
+"OUVERT A TOUS"
+"HOLO PAR EQUIPE"
+"TOURNOI"
+"CAPTURE DRAPEAU"
+
+"NON"
+"OUI"
+
+// Mods Menu
+"ELITE FORCE : HOLOMATCH"
+"MODIF."
+"MODIF. DISPONIBLES"
+
+// Single Player Menu
+"UN SEUL JOUEUR"		
+"NIVEAU"
+"ACCES REFUSE"
+"ADVERSAIRES"
+"INFO JOUEUR"
+
+// Change Player Menu
+"INFO JOUEUR"
+
+// Single Player Reset Menu
+"RETABLIR JOUEUR"
+
+// Setup / Controls / Attack/Look
+"CONFIG. TOUCHES ATTAQ./REGAR."
+
+// Setup / Controls / Movement
+"CONFIG. TOUCHES MOUV."
+// Setup / Controls / Mouse/JoyStick
+"CONFIG. SOURIS/JOYSTICK"
+"SOURIS"
+"JOYSTICK"
+
+// Skill levels
+"CADET"
+"ENSEIGNE"
+"LIEUTENANT"
+"COMMANDER"
+"CAPITAINE"
+// UPDATE 07/31/00 for the above two lines
+
+// Dedicated server
+"NON"
+"LAN"
+"INTERNET"
+
+// Player type
+"OUVERT"
+"HP"
+"FERME"
+
+// Player team
+"BLEUE"
+"ROUGE"
+
+// Single Player Reset
+"ATTENTION : vous allez remettre le statut du joueur"
+"à zéro. Vous devrez recommencer "
+"depuis le début."
+"Rétablir le statut du joueur ?"
+
+//Demo screen
+"Demos introuvables."
+
+"Veuillez entrer la clé CD"
+"Clé CD correcte, merci."
+"Clé CD correcte requise. Veuillez consulter votre documentation."
+
+"Chargement"
+"Connexion"
+"Appuyez sur Echap pour annuler"
+	
+"En attente de la nouvelle clé... Appuyez sur Echap pour annuler"
+"Appuyez sur Entrée ou cliquez pour modifier votre choix"
+"Appuyez sur Retour pour revenir en arrière"
+"Utilisez les touches directionnelles ou cliquez pour modifier votre choix"
+"ATTENTION : vous allez rétablir"
+"les commandes par défaut."
+"STAR TREK : VOYAGER - ELITE FORCE"
+"RAVEN SOFTWARE"
+
+"Nom"
+"Effets"
+
+"Entrer nom fichier : "
+
+"Nom hôte"
+"Niveau"
+"Joueurs"
+"Type"
+"Port"
+"Ping"
+
+"ATTENTION : vous allez rétablir TOUTES"
+"les options par défaut."
+
+"Eliminé : "
+"(NUL)"
+
+
+"ATTENTION : vous allez rétablir toutes"
+"les variables de parties à un seul joueur."
+"Vous allez recommencer"
+"à zéro."
+
+"0 = NON LIMITE"
+
+"CREER RACCOURCIS"
+
+"VOIR SCORES"
+"UTILISER"
+"COURIR/MARCHER"
+"MARCHE AVANT"
+"MARCHE ARRI."
+"PAS GAUCHE"
+"PAS DROITE"
+"HAUT/SAUTER"
+"BAS/S'ACCROUPIR"
+"TOURNER GAUCHE"
+"TOURNER DROITE"
+"PAS COTE/TOURNER"
+"REGAR. HAUT"
+"REGAR. BAS"
+"VUE SOURIS"
+"VUE CENTRALE"
+"ZOOM"
+"ARME 1"
+"ARME 2"
+"ARME 3"
+"ARME 4"
+"ARME 5"
+"ARME 6"
+"ARME 7"
+"ARME 8"
+"ARME 9"
+"ATTAQUER"
+"ATTAQ. SEC."
+"ARME PREC."
+"ARME SUIV."
+"GESTE"
+"TCHACHE"
+"TCHACHE - EQUIPE"
+"TCHACHE - CIBLE"
+"TCHACHE - ATTAQUANT"
+"IGNORER"
+"N'IGNORER PAS ENCORE"
+
+"ATTENTION" 
+"VOUS ALLEZ RETABLIR LES OPTIONS"
+"A LEUR VALEUR PAR DÉFAUT."
+"CONTINUER ? "
+
+"CONFIG. DEFAUT"
+
+"CONFIG. AUTRES OPTIONS"
+
+"REPONSE CONFIG."
+"OFF"
+"HAUT DROITE"
+"BAS DROITE"
+"BAS GAUCHE"
+
+"<= 28.8K"
+"33.6K"
+"56K"
+"ISDN"
+"LAN/CABLE/xDSL"
+
+"CONFIG. RESEAU"
+
+"INFO SERVEUR"
+"OPTIONS SERVEUR"
+
+"SELEC. HP"
+"ELITE FORCE HOLOMATCH : INFO SERVEUR"
+"OUVERT"
+
+"ELITE FORCE HOLOMATCH : AJOUT. HP"
+"AJOUT. HP"
+
+"HOLOPERSONNAGES"
+"PARAMETRES"
+
+"ELITE FORCE HOLOMATCH : SUPPR. HP"
+"SUPPR. HP"
+
+"ELITE FORCE HOLOMATCH : ORDRES EQUIPE"
+"ORDRES EQUIPE"
+
+"ELITE FORCE HOLOMATCH : JOUEURS IGNOREE"
+"JOUEURS IGNOREE"
+"LISTE DES JOUEURS"
+
+"A tous"
+"Je prends la tête"
+"Défendez la base"
+"Suivez-moi"
+"Prenez le drapeau ennemi"
+"Campez ici"
+"Au rapport"
+"Je renonce au commandement"
+"En route"
+
+"%s defend the base."
+"%s follow me."
+"%s get enemy flag."
+"%s camp here."
+"%s report."
+"%s roam."
+
+"RESEAU"
+"SON"
+
+"%d Serveurs Holomatch sur %d."
+"Appuyez sur la barre d'espace pour arrêter"
+
+"Pas de réponse du serveur." 
+"Serveurs introuvables."
+"'Actualiser' pour mettre à jour."
+"Recherche de serveurs."
+
+"Niveau en cours"
+"TRIER PARAMETRES"
+
+"INFORMATION SERVEUR"
+
+"HOLOMATCH"
+"VAINQUEURS"
+
+"ENGLISH"
+"DEUTSCH"
+
+"PASSERELLE : centre de commande du vaisseau. Barre (ordinateur de navigation) : commandes de navigation, Opér. (Centre d'opérations) : allocation des ressources (énergie, capteurs et durée d'exécution) Tactique (Poste tactique) : armement, défense, sécurité interne."
+"PHASEURS AVANT : principale arme offensive de Voyager. Projecteurs de particules/faisceaux fonctionnant à une vitesse inférieure à celle de la lumière mais d'une portée de 300 000 kilomètres."
+"Lance-torpilles à photon : contiennent une petite quantité de matière et d'antimatière dans une enveloppe magnétique. Les torpilles étant lancées à la vitesse de distorsion, elles sont idéales pour les trajets à vitesse supérieure à celle de la lumière."
+"Batterie ventrale de phaseurs : rangée de phaseurs localisée le long de la partie inférieure de Voyager. Les phaseurs servent à la rectification de l'énergie phasique."
+"Batterie de phaseurs médiane : situés de chaque côté du Voyager, ces phaseurs ont un arc de tir de 180 degrés."
+"COLLECTEURS BUSSARD : dispositifs électro-magnétiques destinés à la collecte de l'hydrogène pour les réacteurs à fusion du vaisseau. Le physicien Robert W. Bussard a inventé ce concept en 1960."
+"NACELLES DE DISTORSION : grandes structures hors-bord abritant les moteurs de distorsion. Les nacelles s'abaissent lorsque les moteurs sont inactifs. Elles permettent de voyager à la vitesse de distorsion sans endommager la structure de l'espace."
+"PROPULSEURS DE MANOEUVRE RCS : unités de propulsion pour les manoeuvres à très faible vitesse. Utiles pour la navigation dans les zones restreintes telles que les spatiodocks."
+"VOYAGER : STARSHIP NCC - 74656 : 344 mètres de long, 1 million et demi de tonnes métriques, structure de coque basique en tritanium/duranium. Construit à la station terrienne de McKinley, lancé à la date stellaire 48038.5. Commandé par le Capitaine Kathryn Janeway."
+
+"TYPES MATCH SOLO"
+"NIVEAUX %d - %d"
+"NIVEAU D'HABILETE"
+"POINTS MAXI"
+"HUMAIN"
+"JOUEURS"
+
+"CONNEXION . . ."
+"HOLOPERSONNAGES : %d - %d"
+"SECU."
+"OPTI."
+"MODELES"
+"CLE CD"
+
+"Attente défi"
+"Attente autorisation"
+"Attente connexion"
+"Attente statut partie..."
+
+"FRANCAIS"
+"NIVEAUX INTROUVABLES"
+"PARAMETRES SERVEUR AVANCES"
+
+"ERREUR"
+"Entre 1 et 60"
+"Entre 0 et 64"
+"Entre 150 et 1000"
+"Entre 0 et 5000"
+"Entre 0 et 10 000"
+"Must be a positive number"
+"Entre 0 et MAX CLIENTS"
+
+"HOLODECK 1"
+"BIENVENUE..."
+
+"Entraînement Bat'leth"
+"Capitaine Proton"
+"Chant de Noël"
+"Jour d'honneur"
+"Don Carlo"
+"Flotteur"
+"Résistance française"
+"Golf"
+"Garage"
+"Insurrection Alpha"
+"Bataille klingon"
+"Clair de lune ktarian"
+"Consultant médical"
+"Chute libre en orbite"
+"Socialisation"
+"Torres 2-1-6"
+"Torres Zeta-1"
+"Vélocité"
+
+"HOLOMATCH"
+
+"TM, (R) and (C) 2001 Paramount Pictures, Inc. Tous droits réservés.  Star Trek: Voyager et les produits dérivés sont des marques commerciales de Paramount Pictures."
+"Ce produit contient des logiciels sous licence de Id Software, Inc. Id Technology (C) 1999 - 2001 Id Software, Inc. Tous droits réservés."
+"QUITTER L'HOLOMATCH"
+
+"OU"
+
+"ELITE FORCE HOLOMATCH : CONFIRMATION"
+"CONFIRMATION"
+"REDEM. HOLOMATCH ?"
+"INTERNET2"
+"INTERNET3"
+"INTERNET4"
+"INTERNET5"
+"Valeur par défaut 5"
+"Valeur par défaut 8"
+"Valeur par défaut 250"
+"Valeur par défaut 800"
+"Valeur par défaut 500"
+"Valeur par défaut 1"
+"Valeur par défaut 0 (OFF)"
+
+"STAR TREK : VOYAGER - ELITE FORCE"
+"RAVEN SOFTWARE"
+"Visitez le site officiel sur www.ravensoft.com/eliteforce"
+
+"Appuyez sur Retour pour effacer."
+
+"Ajustez la luminosité"
+"jusqu'à ce que le symbole de la"
+"boîte disparaisse."
+
+"ELITE FORCE : CONFIG. INITIALE"
+"CONFIG. INITIALE"
+
+"Arme de poing standard utilisée par les équipes d'exploration de la Fédération."
+"Puissante arme de la Fédération pour les missions dangereuses."
+"Infinity Modulator : arme anti-Borg créée par Seven of Nine."
+"Développée par les pirates lors de leur captivité dans la Forge."
+"Arme vivante créée par les Ethériens."
+"Haute précision à grande distance pour lancer les grenades."
+"Arme hirogen à base de tetryon phasé."
+"Arme avancée de la Fédération extrêmement destructrice."
+"Découverte par l'équipe d'intervention lors d'une mission sur un cuirassé abandonné."
+
+"CONNEXION AU VOYAGER LCARS . . ."
+"DECONNEXION VOYAGER LCARS . . ."
+
+"Insérez le CD"
+"Clé CD incorrecte"
+
+"Entre 0 et 120"
+"Valeur par défaut 0"
+
+"Entre 0 et 30"
+"Valeur par défaut 5"
+
+"Entre 0 et 120"
+"Valeur par défaut 0"
+
+"SIMULATION HOLODECK"
+"ARMEMENT HOLOMATCH"
+
+"BLEU"
+"ROUGE"
+"ECRAN"
+"DE"
+
+"Téléchargement :"
+"Temps restant estimé :"
+"Taux de transfert :"
+"estimation :"
+"(%s de %s copiés)"
+"(%s copiés)"
+"%s/Sec"
+"ELITE FORCE HOLOMATCH : PARAMETRES AVANCES"
+"VOULEZ-VOUS QUITTER LE MATCH EN COURS ?"
+
+"POLICES(DEVELOPPEUR UNIQ.)"
+"CECI VA REINITIALISER LE MENU. CONTINUER ?"
+
+"Les configurations d'éclat ne prendront pas affectent"
+"jusqu'à ce que ' RECEVIEZ ' le bouton ait été lancé. "
+
+"Recommandés Joueurs"
+
+"Quittez et effacez configurations?"
+
+"Client d'Unpure détecté. Fichiers incorrects de PK3 référencés!"
+"Ne peut pas valider le client pur!"
+"Vous avez été lâchés"
+"hors d'chronométré "
+"serveur s'arrêtent"
+"débranché"
+"cassé téléchargement"
+"Débordement de commande de serveur"
+"détruit fiables des commandes"
+"A3D non disponible"
+
+// NEW TEXT TO BE TRANSLATED - 03/13/01
+"SansClasse"
+"Infiltrateur"
+"TireurD'Élite"
+"Dur"
+"Demo"
+"Médecin"
+"Technicien"
+// NEW TEXT TO BE TRANSLATED - 03/13/01
+"Borg"
+"UTILISER INVENTAIRE"
+"UTILISER OBJET"
+"VOIR OBJECTIFS"
+"PARAMETRES"
+// NEW TEXT TO BE TRANSLATED - 03/13/01
+"Doit être entre 0 et 600"
+"Valeur standarde: 120"
+"Doit être un nombre positif"
+"Valeur standarde: 180"
+"ACTION HEROS"
+"V.I.P."      
Index: baseef/ext_data/mp_buttontext2_francais.dat
===================================================================
--- baseef/ext_data/mp_buttontext2_francais.dat	(revision 0)
+++ baseef/ext_data/mp_buttontext2_francais.dat	(revision 42)
@@ -0,0 +1,356 @@
+
+"MATCH SOLO"				"JOUER CONTRE HP (HOLOPERSONNAGES)"
+"MATCH MULTI"				"JOUER CONTRE HP ET HUMAINS"
+"CONFIGURER"				"AFFECTATION DES TOUCHES"
+"DEMOS"					"VOIR LES DEMOS DES NIVEAUX MULTIJOUEURS"
+"QUITTER"					"QUITTER LE JEU"
+"MODIF."					"CHARGER LES MODIFICATIONS"
+
+// Generic Stuff
+"NON"					"NON"
+"OUI"					"OUI"
+
+// Demo Screen
+"MENU PRINC."				"RETOURNER AU MENU PRINCIPAL"
+"LANCER"					"ACTIVER LA DEMO"
+"/"						"NOM DE DEMO"
+
+
+"VIDEO"					"PARAMETRES VIDEO"
+"COMMANDES"					"AFFECTATION DES TOUCHES ET CONFIGURATION DE LA SOURIS"
+"SON/RESEAU"				"PARAMETRES SON ET RESEAU"
+"OPTIONS JEU"				"CHOISIR OPTIONS DE JEU"
+"CLE CD"					"ENTRER CLE CD"
+"JOUEUR"					"MISE A JOUR DES PARAMETRES JOUEUR"
+"POLICES"					"POLICES ACT. DISPONIBLES"
+
+// Video Data
+"OPTIONS VIDEO"				"CHOIX DES PARAMETRES DU MODE VIDEO"
+"PILOTE GL"					"CHOISIR UN PILOTE GL (VOODOO ou DEFAUT)"
+"EXTENSIONS GL"				"EXTENSIONS GL (O/N)"
+"MODE VIDEO"				"MODE VIDEO ACTUEL"
+"COULEURS"					"16 OU 32 BITS"
+"PLEIN ECRAN"				"MODE PLEIN ECRAN OU FENETRES"
+"ECLAIRAGE"					"ECLAIRAGE DYNAMIQUE OU VERTEX"
+"DETAIL GEOMETRIE"			"NIVEAU DE DETAIL GEOMETRIQUE"
+"DETAIL TEXTURE"				"NIVEAU DE DETAIL DE TEXTURE"
+"QUALITE TEXTURE"				"NIVEAU DES BITS DE TEXTURE"
+"FILTRE TEXTURE"				"BILINEAIRE OU TRILINEAIRE"
+"APPLIQUER"					"APPLIQUER LES MODIFICATIONS"
+"INFO VIDEO"				"MISE A JOUR DES INFOS VIDEO"
+"VIDEO SUPPL."				"MISE A JOUR DES INFOS VIDEO SUPPLEMENTAIRES"
+"INFO PILOTE"				"INFO PILOTE VIDEO"
+
+//	Video 2 Data
+"LUMINOSITE"				"REGLER NIVEAU DE LUMINOSITE DU JEU"
+"TAILLE ECRAN"				"REGLER TAILLE DE L'ECRAN DE JEU"
+
+// Setup / Sound
+"VOLUME EFFETS"				"VOLUME DES EFFETS SONORES"
+"VOLUME MUSIQUE"				"VOLUME DE LA MUSIQUE"
+"VOLUME VOIX"				"VOLUME DES VOIX"
+"QUALITE SON"				"QUALITE DU SON"
+"A3D"						"SON A3D ON/OFF"
+"APPAREIL SON"				"SELECTION DE L'APPAREIL DU SON OPENAL"
+
+"APPUYEZ TOUCHE OU ECHAP POUR ANNULER"	"/"
+
+"ARMES"					"CONFIGURER TOUCHES D'ARMES"
+"ATTAQ./REGAR."				"CONFIGURER TOUCHES ATTAQUER/REGARDER"
+"MOUVEMENT"					"CONFIGURER TOUCHES DE MOUVEMENT"
+"REPONSE"					"CONFIGURER TOUCHES DE COMMANDE"
+"SOURIS/JOYSTICK"				"CONFIGURER LES OPTIONS SOURIS ET JOYSTICK"
+"AUTRES OPTIONS"				"OPTIONS SUPPLEMENTAIRES"
+
+"ON"						"ACTIVER"
+"OFF"						"DESACTIVER"
+
+// Player settings
+"HANDICAP"					"CHOISIR HANDICAP DU JOUEUR"
+"NOM"						"CHOISIR NOM DE JOUEUR"
+
+// Game Options
+"DOMMAGES MUR"				"ACTIVER DOMMAGES SUR LES MURS"
+"DOMMAGES"					"/"
+"ECLAIR. DYN."				"ACTIVER/DESACTIVER ECLAIRAGE DYNAMIQUE"
+"ECLAIR."					"/"
+"LENS"					"AFFICHER LENS FLARE OUI/NON"
+"FLARE"					"/"
+"IDENTIF. CIBLE"				"ACTIVER/DESACTIVER IDENTIFICATEUR DE CIBLE"
+"CIBLE"					"/"
+"SYNC. CADRE"				"SYNC. DES CADRES OUI/NON"
+"CADRE"					"/"
+"VISEUR"					"REGLER VISEUR"
+
+// Quit Game
+"OUI"						"QUITTER PARTIE"
+"NON"						"RETOURNER AU MENU PRINC."
+
+// Single Player Server
+"RETABLIR STATUT"			     "RETABLIR STATUT DU JOUEUR HOLOMATCH"
+"CREER MATCH"				"CREER UN MATCH ET REGLER LES OPTIONS"
+"MATCH PREREGL."				"COMMENCER UN MATCH PREREGLE"
+"NIVEAU SUIV."				"VOIR NIVEAU SUIVANT"
+"NIVEAU PREC."				"VOIR NIVEAU PRECEDENT"
+"CHANGER JOUEUR"				"MODIFIER INFO JOUEUR"
+"DEBUT"					"COMMENCER UN HOLOMATCH PREREGLE"
+"MATCH"					"/"
+"ANNUL."					"REVENIR AUX PARAMETRES DE MATCH"
+"LANCER"					"LANCER L'HOLOMATCH"
+
+// Skill levels
+"CADET"					"NIVEAU DEBUTANT"
+"ENSEIGNE"					"NIVEAU FACILE"
+"LIEUTENANT"				"NIVEAU MOYEN"
+"COMMANDER"					"NIVEAU AVANCE"
+"CAPITAINE"					"NIVEAU EXPERT"
+// UPDATE 07/31/00 for the above two lines
+
+
+// Multiplayer Server
+"SERVEURS"					"RECHERCHE DE SERVEURS"
+"TYPE PARTIE"				"TYPE DE PARTIE"
+"TRIER PAR"					"METHODE DE TRI DES SERVEURS"
+"SERV. PLEINS"				"AFFICHER LA LISTE DES SERVEURS PLEINS"
+"SERV. VIDES"				"AFFICHER LA LISTE DES SERVEURS VIDES"
+"ACTUALISER"				"ACTUALISER LA LISTE DES SERVEURS"
+"ARRÊTEZ"					"INTERROMPRE LA RECHERCHE"
+
+"TYPE PARTIE"				"TYPE DE PARTIE"
+
+
+"CHERCH. SERVEUR"			"CHERCHER UN SERVEUR"
+"SPECIF. SERVEUR"			"TROUVER UN SERVEUR SPECIFIQUE"
+"CREER SERVEUR"				"CREER SON PROPRE SERVEUR"
+
+"LANCER"					"REJOINDRE LE SERVEUR CHOISI"
+"CHARGER MODIF."				"CHARGER MODIFICATION"
+
+	// Single Player reset
+"OUI"						"RETABLIR VARIABLES JOUEUR"
+"NON"						"NE PAS RETABLIR VARIABLES JOUEUR"
+
+"CHANGER MODELE"				"CHANGER MODELE DE JOUEUR"
+
+	// Ingame menu
+"EQUIPE"					"ALLER AU MENU EQUIPE"
+"AJOUT. HP"					"AJOUTER HOLOPERSONNAGES A L'HOLOMATCH"
+"SUPPR. HP"					"SUPPRIMER HOLOPERSONNAGES DE L'HOLOMATCH"
+"ORDRES EQUIPE"				"DONNER DES ORDRES"
+"JOUEURS IGNOREE"				"ADMINISTRER LES NOMS IGNOREE"
+"CONFIGURER"				"CHANGER CONFIGURATION DE JEU"
+"INFO SERVEUR"				"CHANGER INFORMATIONS SERVEUR"
+"REDEM. MATCH"				"REDEMARRER NOUVEL HOLOMATCH"
+"CONTINUER MATCH"				"REPRENDRE HOLOMATCH EN COURS"
+"QUIT. MATCH"				"QUITTER HOLOMATCH EN COURS"
+"QUIT. PROGRAMME"				"QUITTER STAR TREK : VOYAGER - ELITE FORCE"
+//UPDATE 07/31/00 for the above line
+
+
+
+// Team menu
+"REJOIN. ROUGE"				"REJOINDRE EQUIPE HOLOMATCH ROUGE"
+"REJOIN. BLEUE"				"REJOINDRE EQUIPE HOLOMATCH BLEUE"
+"REJOIN. MATCH"				"REJOINDRE MATCH EN COURS"
+"OBSERVATEUR"				"DEVENIR UN OBSERVATEUR"
+"MENU INTERFACE"			"REVENIR AU MENU PRINC. D'INGAME"
+
+// Setup/ Controls/ Mouse Config
+"CAMERA LIBRE"				"CAMERA LIBRE ON/OFF"
+"VITESSE SOURIS"				"VITESSE DU POINTEUR SUR L'ECRAN"
+"INVERSER SOURIS"				"INVERSE LA VUE DE LA SOURIS"
+"ADOUCIR SOURIS"				"ADOUCISSEMENT DE LA SOURIS (ON/OFF)"
+"ACTIVER JOYSTICK"			"ACTIVER LE JOYSTICK (ON/OFF)"
+"CALIBRAGE JOYSTICK"			"CALIBRAGE DU JOYSTICK"
+"RETOUR DE FORCE"				"JOYSTICK AVEC RETOUR DE FORCE"
+
+"RETOUR"					"RETOUR A L'ECRAN PREC."
+"INFO JOUEUR"				"CHANGER NOM ET HANDICAP"
+"/"					 	"VOIR MODELES PAGE SUIV."
+"/"						"VOIR MODELES PAGE PREC."
+
+// Ingame Quit Screen
+"NON"						"NE PAS QUITTER LA PARTIE"
+"OUI"						"QUITTER LA PARTIE ET REVENIR AU POSTE DE TRAVAIL"
+
+"CLE CD"					"ENTRER CLE CD"
+
+"UN SEUL JOUEUR"				"JOUER EN MODE UN SEUL JOUEUR"
+"PARAM. PAR DEFAUT"			"RETABLIR CONFIGURATION DE DEPART"
+
+"NON"						"NE PAS RETABLIR LES OPTIONS"
+"OUI"						"RETABLIR LA CONFIGURATION PAR DEFAUT DES OPTIONS"
+
+"VIT. TOUCHE TOURNER"			"VITESSE DE LA TOUCHE TOURNER"
+"COURIR TJS."				"TOUJOURS COURIR"
+"VISION SOURIS"				"VISION DE LA SOURIS"
+"CHGT. AUTO ARMES"			"CHANGEMENT AUTOMATIQUE D'ARMES EN CAS D'EPUISEMENT DES MUNITIONS"
+
+"IMPOSER MODELES"				"TOUS LES PARTICIPANTS UTILISENT LE MEME MODELE DE JOUEUR"
+"ACTIV. CONSOLE EQUIPE"			"ACTIVER LA CONSOLE DE L'EQUIPE"
+"TELECHARG. AUTO"				"TELECHARGEMENT AUTOMATIQUE DES MODIFICATIONS"
+"OBJETS SIMPLES"				"LES MODELES D'OBJETS DEVIENNENT DES SPRITES"
+
+"RESEAU"					"REGLER OPTIONS RESEAU"
+"VITESSE"					"VITESSE DU MODEM OU DE LA CONNEXION"
+
+"AJOUTER AUX FAVORIS"			"AJOUTER LE SERVEUR A LA LISTE DES FAVORIS"
+
+"/"						"VOIR CARTES PREC."
+"/"						"VOIR CARTES SUIV."
+
+"CONTINUER"					"CREER LE SERVEUR"
+"POINTS MAXI :"				"NOMBRE MAXIMUM DE POINTS"
+"CAPTURES MAXI :"				"NOMBRE MAXIMUM DE CAPTURES"
+"TEMPS MAXI :"				"TEMPS ALLOUE"
+"TIR AMICAL"				"AUTORISER LE TIR SUR LES COEQUIPIERS ?"
+"SERVEUR PUR"				"UTILISER UN SERVEUR PUR"
+"SERVEUR DEDIE"				"UTILISER UN SERVEUR DEDIE"
+"NOM HOTE :"				"NOM DU SERVEUR POUR LA PARTIE"
+"GRADE HP"				"GRADE HOLOPERSONNAGE"
+"1"						"PORT N°1"
+"2"						"PORT N°2"
+"3"						"PORT N°3"
+"4"						"PORT N°4"
+"5"						"PORT N°5"
+"6"						"PORT N°6"
+"7"						"PORT N°7"
+"8"						"PORT N°8"
+"9"						"PORT N°9"
+"10"						"PORT N°10"
+"11"						"PORT N°11"
+"12"						"PORT N°12"
+"CHANGER NIVEAU"				"CHOISIR UN AUTRE NIVEAU"
+
+"/"						"VOIR HOLOPERSONNAGES PREC."
+"/"						"VOIR HOLOPERSONNAGES SUIV."
+"ACCEPTER"					"ACCEPTER DONNEES"
+"EQUIPE :"					"EQUIPE"
+"GRADE :"				"GRADE DE L'HP"
+
+"SUPPR."					"SUPPRIMER HOLOPERSONNAGE"
+"AJOUT."					"IGNORER JOUEUR SELECTEE"
+"SUPPR."					"SUPPRIMER L'IGNORE"
+"SUPPR. TOUS"					"VIDER LA LISTE DES JOUEURS IGNOREE"
+
+"/"						"FAIRE DEFILER VERS LE HAUT"
+"/"						"FAIRE DEFILER VERS LE BAS"
+"SUPPR."					"SUPPRIMER SERVEUR DE LA LISTE"
+
+"ADRESSE"					"ADRESSE DU SERVEUR"
+"PORT"					"PORT DU SERVEUR"
+
+"REJOUER"					"/"
+"MATCH SUIV."				"/"
+
+"RETOUR"					"/"
+
+"LANGUE"					"CHANGER DE LANGUE"
+
+"FEDERATION"				"INFO SUR LA FEDERATION"
+"CARDASSIA"				"INFO SUR L'EMPIRE CARDASSIEN"
+"ALLIANCE FERENGI"			"INFO SUR L'ALLIANCE FERENGI"
+"EMPIRE ROMULIEN"			"INFO SUR L'EMPIRE ROMULIEN"
+"EMPIRE KLINGON"			"INFO SUR L'EMPIRE KLINGON"
+"DOMINION"				"INFO SUR LE DOMINION"
+"POINT DE DEPART VOYAGER"		"INFO SUR VOYAGER"
+"70 000 ANNEES-LUMIERE"			"/"
+"BORG"					"INFO SUR LES BORGS"
+"ESPACE"					"/"
+"EXTREM. IDRAN"				"INFO SUR LE VORTEX BAJORAN"
+"VORTEX BAJORAN"				"/"
+"NOYAU GALACTIQUE"			"INFO SUR LE NOYAU GALACTIQUE"
+
+"ALPHA"					"INFO SUR LE QUADRANT ALPHA"
+"BETA"					"INFO SUR LE QUADRANT BETA"
+"DELTA"					"INFO SUR LE QUADRANT DELTA"
+"GAMMA"					"INFO SUR LE QUADRANT GAMMA"
+"QUADRANT"				"/"
+
+"PHASEUR AVANT"				"INFO SUR PHASEURS AVANT"
+"Lance-torpilles"			"INFO SUR LES TORPILLES AVANT"
+"à photon"				"/"
+" "					"/"
+
+"Batterie ventrale de phaseurs"		"INFO SUR LA RANGEE VENTRALE DE PHASEUR"
+"Batterie de phaseurs"			"INFO SUR LA RANGEE MEDIANE DE PHASEUR"
+"Médiane"				"/"
+
+
+"COLLECTEURS BUSSARD"			"INFO SUR LES COLLECTEURS BUSSARD"
+"NACELLES DE DISTORSION"		"INFO SUR LES NACELLES DE DISTORSION"
+"PROPULSEURS DE MANOEUVRE RCS"		"INFO SUR LES PROPULSEURS"
+"U.S.S. VOYAGER"			"INFO SUR VOYAGER"
+"PASSER."				"INFO SUR LA PASSERELLE"
+
+"CAPT. ECRAN"				"REALISER DES CAPTURES D'ECRAN DE LA PARTIE EN COURS"
+
+"DEFAUT"			   	"AFFICHER VERSION PAR DEFAUT"
+"ROUGE"					"AFFICHER VERSION ROUGE"
+"BLEU"					"AFFICHER VERSION BLEUE"
+"LENS FLARE"				"REGLER LENS FLARE"
+"AVANCES"				"PARAMETRES AVANCES DU SERVEUR"
+"REJOIN. AUTO EQUIPE"			"REJOINDRE AUTOMATIQUEMENT LES JEUX D'EQUIPE"
+"EQUIL. AUTO"				"EQUILIBRE AUTOMATIQUEMENT LES JOUEURS DANS LES JEUX PAR EQUIPE"
+"MAX CLIENTS"				"NOMBRE MAXIMUM DE JOUEURS/HP AUTORISES"
+"DOMMAGES CHUTES"			"ACTIVER CHUTE DES DOMMAGES OUI/NON"
+"REGEN. ARME"				"NOMBRE DE SECONDES JUSQU'A LA REGENERATION DES ARMES"
+"VITESSE COURSE"				"VITESSE DE COURSE DES JOUEURS"
+"GRAVITE"					"GRAVITE DANS LE JEU"
+"COUT"					"NOMBRE DE JOUEURS DEPLACES A CAUSE DE DOMMAGES"
+"DAMAGE MULTIPLIER"		"MULTIPLIES ALL DAMAGE IN THE GAME BY THIS AMOUNT"
+
+"NUANCES SIMPLES"			"SIMPLIFIER LES NUANCES POUR LES CARTES VIDEO OBSOLETES"
+"MINIMUM JOUEURS"			"HOLOPERSONNAGES AJOUTES/SUPPRIMES POUR ATTEINDRE CE NOMBRE (PAR EQUIPE)"
+
+"PHASEUR"				"VOIR INFO PHASEUR"
+"FUSIL"				"VOIR INFO FUSIL A COMPRESSION"
+"I-MOD"				"VOIR INFO I-MOD"
+"FUSIL PIRATE"			"VOIR INFO FUSIL PIRATE"
+"STASIS"				"VOIR INFO ARME STASIS"
+"LANCE-GRENADES"			"VOIR INFO LANCE-GRENADES"
+"DISRUPTEUR TETRYON"		"VOIR INFOS ARME TETRYON"
+"RAFALE PHOTONS"		"VOIR INFO RAFALE DE PHOTONS"
+"ARC WELDER"			"VOIR INFO ARC WELDER"
+
+"FILTRE ANISOTROPIQUE"		"ACTIVER/DESACTIVER LE FILTRE"
+"TEXTURES COMPRESSEES"		"ACTIVER/DESCATIVER LES TEXTURES COMPRESSEES"
+
+"AJUSTER REGEN. OBJET"		"AJUSTER NOMBRE DE REGENERATION AU NOMBRE DE JOUEURS"
+"INTRO HOLODECK"		"Activer/désactiver les portes de l'Holodeck à chaque niveau"
+
+"FIXER REGEN. JOUEUR"		"SECONDES D'ATTENTE AVANT REGENERATION. 0 = TOUJOURS"
+"REGEN. INVULNERABILITE"	"SECONDES D'INVULNERABILITE JUSQU'A REGENERATION"
+"PREPAR."			"SECONDES D'ATTENTE JUSQU'A LA CONNEXION DES AUTRES JOUEURS"
+
+"GROUPE EQUIPE BLEU"		"GROUPE IMPOSE POUR EQUIPE BLEU"
+"GROUPE EQUIPE ROUGE"		"GROUPE IMPOSE POUR EQUIPE ROUGE"
+ 
+"TEXTE"				"LANGUE DES TEXTES A L'ECRAN"
+"VOIX"				"LANGUE DES VOIX"
+"REINITIALISER NIV."		"ANNULER CLASSEMENT NIVEAUX"
+"EQUIPE"				"SELECTION EQUIPE"
+
+"ENTRER CLE PLUS TARD"		"ENTRER LA CLE CD PLUS TARD A PARTIR DU MENU CONFIGURER"
+
+"PETITE"			"AFFICHER PETITE POLICE"
+"MOYENNE"			"AFFICHER POLICE MOYENNE"
+"GRANDE"			"AFFICHER GRANDE POLICE"
+"RESEAU"			"VOIR LES PERSONNAGES EN RESEAU"
+"CLAVIER"			"DISPOSITION DE CLAVIER"
+
+"X AXE"				"ANALOGUE JOYSTICK X AXE"
+"Y AXE"				"ANALOGUE JOYSTICK Y AXE"
+"ASSIMILATION"			"JOUEURS TUE JOINDRENT LES BORG"
+"SPECIALTIES"			"JOUERS DOIVENT SELECTER UNE CLASSE"
+"DISINTEGRATION"		"UN SEUL COUP REUSSI CAUSE LE MORT IMMEDIATEMENT"
+"ACTION HERO"			"UN JOUEUR FORTUIT RECOIT TOUS LES ARMES ET DE L'ARMURE"
+"ELIMINATION"			"DERNIER PERSONNE VIVANTE GAGNE LE JEUX"
+"CLASS"				"CLASSE DE JOUEUR"
+"TEAM/CLASS"			"SELECTES L'EQUIPE ET LE CLASSE DE JOUEUR"
+"AUTO ASSIGN TEAM"		"JOUEURS NOUVEAUX ENTRENT L'EQUIPE PLUS NECESSITEUX"
+"NO JOIN TIME OUT"		"EMPLOYEE DANS L'ASSIMILATION ET L'ELIMINATION"
+"CLASS CHANGE TIME OUT"		"DELAI FORCEE AVENT QU'EN PUISSE CHANGER LA CLASSE"
+
+// TS 10.12.2001
+"HOST MOTD :"		"MESSAGE DU JOUR PENDANT L'ETABLISSEMENT DE LA CONNEXION"
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 0)
+++ ChangeLog	(revision 42)
@@ -0,0 +1,84 @@
+2006-11-09 Thilo Schulz <arny@ats.s.bawue.de>
+	- Version bump to 1.37
+
+2006-08-13 Thilo Schulz <arny@ats.s.bawue.de>
+	- Fix nameclash with old mods that would access the new language
+	  files
+
+2006-08-26 Thilo Schulz <arny@ats.s.bawue.de>
+	- Fix demo selection menu to display demos using the new netprotocol
+	  as well.
+	- clean up demo menu code
+
+2006-08-22 Thilo Schulz <arny@ats.s.bawue.de>
+	- Update sound menu to reflect the changes in quake3's sound system.
+
+2006-08-21 Thilo Schulz <arny@ats.s.bawue.de>
+	- Version bump to 1.36
+
+2006-08-05 Thilo Schulz <arny@ats.s.bawue.de>
+	- Add player selection for adding ignores to menu.
+
+2006-08-04 Thilo Schulz <arny@ats.s.bawue.de>
+	- Add menu for removing ignores.
+	- Cut name length back to 31 characters instead of 36.
+
+2006-08-02 Thilo Schulz <arny@ats.s.bawue.de>
+	- Add ignore system that allows users to ignore chat messages from
+	  certain players.
+
+2006-07-09 Thilo Schulz <arny@ats.s.bawue.de>
+	- Fix server log string for means of death.
+	- Fix vote bug where changing teams would give you a new vote.
+
+2006-07-07 Thilo Schulz <arny@ats.s.bawue.de>
+	- Disallow non-printable characters in player names.
+	- Disallow suicide for non-borg classes when playing assimilation.
+
+2006-07-06 Thilo Schulz <arny@ats.s.bawue.de>
+	- Fix critical buffer overflow in cgame. See
+	  http://www.milw0rm.com/exploits/1977 for more info.
+
+2006-06-22 Thilo Schulz <arny@ats.s.bawue.de>
+	- Demolist now shows next page instead of next demo when pressing
+	  the down button.
+	- Increased max. count of demos to 1024
+	- Incorporated Thomas Sahling aka Lt. Cmdr. Salinga's EF LCARS
+	  mod that fixes a few bugs and increases some limits like maximum
+	  number of maps displayed and adds support for saving the
+	  serverlist to a file.
+
+2006-04-24 Timothy 'TiM' Oliver <timothyoliver@bigpond.com>
+	- Incorporated scroll controls into the demo selection user
+	  interface. Great care was maintained to ensure relative case was
+	  preserved.
+
+2006-04-22 Thilo Schulz <arny@ats.s.bawue.de>
+	- Fixed a small uncleanness that is probably of no real consequence
+	  to gameplay.
+	- Fixed some game issues.
+	  Bots can now join password protected servers, too.
+	  For more infos see:
+	  http://www.quake3world.com/ubb/Forum4/HTML/006208.html
+
+2006-04-13 Thilo Schulz <arny@ats.s.bawue.de>
+	- Changed demo names to be stored in lowercase in the menu
+	  structures for unix' case sensitivity.
+
+2006-04-08 Thilo Schulz <arny@ats.s.bawue.de>
+	- Added a bit of verboseness to the init_tonextint() function.
+
+2006-04-04 Thilo Schulz <arny@ats.s.bawue.de>
+	- Fixed a bug where the renderer shows certain weapon fire to go
+	  through the upper half of a forcefield.
+
+2006-03-17 Thilo Schulz <arny@ats.s.bawue.de>
+	- Added Makefile based build system for UNIXoid environments.
+	- New function for rounding floats to the next integer introduced
+	  that yields the same behaviour on all platforms.
+	- SnapVector macro changed to use the new rounding method. It will
+	  make the movement work similarly on all platforms.
+	- Fixed 64bit safety when compiling to shared objects.
+	- Modified the random number generators to discard the first 17 bits
+	  to emulate the behaviour of the VM generators.
+	- Fixed a few compiler warnings/errors.
Index: Code-DM/game/g_syscalls.c
===================================================================
--- Code-DM/game/g_syscalls.c	(revision 1)
+++ Code-DM/game/g_syscalls.c	(revision 42)
@@ -5,10 +5,10 @@
 // this file is only included when building a dll
 // g_syscalls.asm is included instead when building a qvm
 
-static int (QDECL *syscall)( int arg, ... ) = (int (QDECL *)( int, ...))-1;
+static intptr_t (QDECL *syscall)( intptr_t arg, ... ) = (intptr_t (QDECL *)( intptr_t, ...))-1;
 
 
-void dllEntry( int (QDECL *syscallptr)( int arg,... ) ) {
+void dllEntry( intptr_t (QDECL *syscallptr)( intptr_t arg,... ) ) {
 	syscall = syscallptr;
 }
 
Index: Code-DM/game/g_local.h
===================================================================
--- Code-DM/game/g_local.h	(revision 1)
+++ Code-DM/game/g_local.h	(revision 42)
@@ -234,7 +234,7 @@
 	qboolean	localClient;		// true if "ip" info key is "localhost"
 	qboolean	initialSpawn;		// the first spawn should be at a cool location
 	qboolean	predictItemPickup;	// based on cg_predictItems userinfo
-	char		netname[36];
+	char		netname[MAX_NAME_LENGTH];
 	int			maxHealth;			// for handicapping
 	int			enterTime;			// level.time the client entered the game
 	playerTeamState_t teamState;	// status in teamplay games
Index: Code-DM/game/q_math.c
===================================================================
--- Code-DM/game/q_math.c	(revision 1)
+++ Code-DM/game/q_math.c	(revision 42)
@@ -3,6 +3,7 @@
 // q_math.c -- stateless support routines that are included in each code module
 #include "q_shared.h"
 
+int nonansicast = 0;
 
 vec3_t	vec3_origin = {0,0,0};
 vec3_t	axisDefault[3] = { { 1, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 } };
@@ -1340,7 +1341,7 @@
 */
 float flrandom(float min, float max)
 {
-	return ((rand() * (max - min)) / 32768.0F) + min;
+	return (((rand() & 0x7FFF) * (max - min)) / 32768.0F) + min;
 }
 
 /*
@@ -1350,7 +1351,7 @@
 int irandom(int min, int max)
 {
 	max++; //so it can round down
-	return ((rand() * (max - min)) >> 15) + min;
+	return (((rand() & 0x7FFF) * (max - min)) >> 15) + min;
 }
 
 
@@ -1372,3 +1373,38 @@
 	vect[1] /= 8191.0;
 	vect[2] /= 8191.0;
 }
+
+// Rounds the argument to the next integer. Used by SnapVector.
+void init_tonextint(qboolean verbose)
+{
+	float decimal = 0.9;
+
+	nonansicast = (int) decimal;
+	
+	if(verbose)
+	{
+		if(nonansicast)
+			Com_Printf("Float to int casting behaviour: round to next int\n");
+		else
+			Com_Printf("Float to int casting behaviour: ISO compliant\n");
+	}
+}
+
+float tonextint(float x)
+{
+	int casted;
+	float rest;
+
+	if(nonansicast)
+		return (int) x;
+
+	casted = (int) x;
+	rest = x - (float) casted;
+
+	if(rest >= 0.5f)
+		return casted+1;
+	else if(rest <= -0.5f)
+		return casted - 1;
+	else
+		return casted;
+}
Index: Code-DM/game/g_active.c
===================================================================
--- Code-DM/game/g_active.c	(revision 1)
+++ Code-DM/game/g_active.c	(revision 42)
@@ -1159,7 +1159,7 @@
 	if (xaxis)
 	{
 		VectorSet(ent->r.mins, -halfWidth, -SHIELD_HALFTHICKNESS, -(height>>1));
-		VectorSet(ent->r.maxs, halfWidth, SHIELD_HALFTHICKNESS, height>>1);
+		VectorSet(ent->r.maxs, halfWidth, SHIELD_HALFTHICKNESS, height);
 	}
 	else
 	{
Index: Code-DM/game/g_main.c
===================================================================
--- Code-DM/game/g_main.c	(revision 1)
+++ Code-DM/game/g_main.c	(revision 42)
@@ -192,7 +192,7 @@
 This MUST be the very first function compiled into the .q3vm file
 ================
 */
-int vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6 ) {
+intptr_t vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6 ) {
 	switch ( command ) {
 	case GAME_INIT:
 		G_InitGame( arg0, arg1, arg2 );
@@ -201,7 +201,7 @@
 		G_ShutdownGame( arg0 );
 		return 0;
 	case GAME_CLIENT_CONNECT:
-		return (int)ClientConnect( arg0, arg1, arg2 );
+		return (intptr_t)ClientConnect( arg0, arg1, arg2 );
 	case GAME_CLIENT_THINK:
 		ClientThink( arg0 );
 		return 0;
@@ -493,6 +493,7 @@
 	G_Printf ("gamename: %s\n", GAMEVERSION);
 	G_Printf ("gamedate: %s\n", __DATE__);
 
+	init_tonextint(qtrue);
 	srand( randomSeed );
 
 	noJoinLimit = 0;//allow players to join the game still
@@ -1202,7 +1203,9 @@
 qboolean levelExiting = qfalse;
 void ExitLevel (void) {
 	int		i;
-
+	char nextmap[MAX_STRING_CHARS];
+	char d1[MAX_STRING_CHARS];
+               
 	levelExiting = qtrue;
 
 	//bot interbreeding
@@ -1222,8 +1225,16 @@
 		return;	
 	}
 
+	trap_Cvar_VariableStringBuffer( "nextmap", nextmap, sizeof(nextmap) );
+	trap_Cvar_VariableStringBuffer( "d1", d1, sizeof(d1) );
 
-	trap_SendConsoleCommand( EXEC_APPEND, "vstr nextmap\n" );
+	if( !Q_stricmp( nextmap, "map_restart 0" ) && Q_stricmp( d1, "" ) ) {
+		trap_Cvar_Set( "nextmap", "vstr d2" );
+		trap_SendConsoleCommand( EXEC_APPEND, "vstr d1\n" );
+	} else {
+		trap_SendConsoleCommand( EXEC_APPEND, "vstr nextmap\n" );
+	}
+
 	level.changemap = NULL;
 	level.intermissiontime = 0;
 
@@ -1620,7 +1631,12 @@
 		if ( level.warmupTime < 0 ) {
 			if ( level.numPlayingClients == 2 ) {
 				// fudge by -1 to account for extra delays
-				level.warmupTime = level.time + ( g_warmup.integer - 1 ) * 1000;
+				if ( g_warmup.integer > 1 ) {
+					level.warmupTime = level.time + ( g_warmup.integer - 1 ) * 1000;
+				} else {
+					level.warmupTime = 0;
+				}
+
 				trap_SetConfigstring( CS_WARMUP, va("%i", level.warmupTime) );
 			}
 			return;
Index: Code-DM/game/g_bot.c
===================================================================
--- Code-DM/game/g_bot.c	(revision 1)
+++ Code-DM/game/g_bot.c	(revision 42)
@@ -214,7 +214,7 @@
 */
 void G_AddRandomBot( int team ) {
 	int		i, n, num, skill;
-	char	*value, netname[36], *teamstr;
+	char	*value, netname[MAX_NAME_LENGTH], *teamstr;
 	gclient_t	*cl;
 
 	num = 0;
@@ -283,7 +283,7 @@
 */
 int G_RemoveRandomBot( int team ) {
 	int i;
-	char netname[36];
+	char netname[MAX_NAME_LENGTH];
 	gclient_t	*cl;
 
 	for ( i=0 ; i< g_maxclients.integer ; i++ ) {
Index: Code-DM/game/Makefile
===================================================================
--- Code-DM/game/Makefile	(revision 0)
+++ Code-DM/game/Makefile	(revision 42)
@@ -0,0 +1,119 @@
+default: qvm
+qvm: build_qvm
+so: build_so
+
+# bins for building VMs (you need all q3lcc, q3rcc, q3cpp and q3asm in the same dir.)
+Q3LCC = ../../bin/q3lcc
+Q3ASM = ../../bin/q3asm
+
+# compiler to use for building shared objects
+CC = gcc
+
+# cflags for the VM compiler
+VMCFLAGS = $(CFLAGS) -DQ3_VM
+# cflags for the compiler
+SOCFLAGS = $(CFLAGS) -g3 -ggdb3 -fPIC
+
+ARCH=$(shell uname -m | sed -e s/i.86/i386/)
+
+OBJ = \
+  g_main.o \
+  ai_chat.o \
+  ai_cmd.o \
+  ai_dmnet.o \
+  ai_dmq3.o \
+  ai_main.o \
+  ai_team.o \
+  bg_misc.o \
+  bg_pmove.o \
+  bg_slidemove.o \
+  g_active.o \
+  g_arenas.o \
+  g_bot.o \
+  g_breakable.o \
+  g_client.o \
+  g_cmds.o \
+  g_combat.o \
+  g_fx.o \
+  g_items.o \
+  g_log.o \
+  g_mem.o \
+  g_misc.o \
+  g_missile.o \
+  g_mover.o \
+  g_session.o \
+  g_spawn.o \
+  g_svcmds.o \
+  g_target.o \
+  g_team.o \
+  g_trigger.o \
+  g_turrets.o \
+  g_usable.o \
+  g_utils.o \
+  g_weapon.o \
+  q_math.o \
+  q_shared.o \
+  
+SOOBJ = \
+  g_syscalls.o \
+
+QVMOBJ = \
+  bg_lib.o \
+
+DO_VMCC = $(Q3LCC) $(VMCFLAGS) -o $@ -c $<
+DO_SOCC = $(CC) $(SOCFLAGS) -o $@ -c $<
+
+build_qvm: DO_CC=$(DO_VMCC)
+build_so: DO_CC=$(DO_SOCC)
+
+ai_chat.o : ai_chat.c; $(DO_CC)
+ai_cmd.o : ai_cmd.c; $(DO_CC)
+ai_dmnet.o : ai_dmnet.c; $(DO_CC)
+ai_dmq3.o : ai_dmq3.c; $(DO_CC)
+ai_main.o : ai_main.c; $(DO_CC)
+ai_team.o : ai_team.c; $(DO_CC)
+bg_misc.o : bg_misc.c; $(DO_CC)
+bg_pmove.o : bg_pmove.c; $(DO_CC)
+bg_slidemove.o : bg_slidemove.c; $(DO_CC)
+g_active.o : g_active.c; $(DO_CC)
+g_arenas.o : g_arenas.c; $(DO_CC)
+g_bot.o : g_bot.c; $(DO_CC)
+g_breakable.o : g_breakable.c; $(DO_CC)
+g_client.o : g_client.c; $(DO_CC)
+g_cmds.o : g_cmds.c; $(DO_CC)
+g_combat.o : g_combat.c; $(DO_CC)
+g_fx.o : g_fx.c; $(DO_CC)
+g_items.o : g_items.c; $(DO_CC)
+g_log.o : g_log.c; $(DO_CC)
+g_main.o : g_main.c; $(DO_CC)
+g_mem.o : g_mem.c; $(DO_CC)
+g_misc.o : g_misc.c; $(DO_CC)
+g_missile.o : g_missile.c; $(DO_CC)
+g_mover.o : g_mover.c; $(DO_CC)
+g_session.o : g_session.c; $(DO_CC)
+g_spawn.o : g_spawn.c; $(DO_CC)
+g_svcmds.o : g_svcmds.c; $(DO_CC)
+g_target.o : g_target.c; $(DO_CC)
+g_team.o : g_team.c; $(DO_CC)
+g_trigger.o : g_trigger.c; $(DO_CC)
+g_turrets.o : g_turrets.c; $(DO_CC)
+g_usable.o : g_usable.c; $(DO_CC)
+g_utils.o : g_utils.c; $(DO_CC)
+g_weapon.o : g_weapon.c; $(DO_CC)
+q_math.o : q_math.c; $(DO_CC)
+q_shared.o : q_shared.c; $(DO_CC)
+  
+g_syscalls.o : g_syscalls.c; $(DO_CC)
+
+bg_lib.o : bg_lib.c; $(DO_CC)
+
+build_qvm: $(OBJ) $(QVMOBJ)
+	$(Q3ASM) -vq3 -o qagame.qvm $(OBJ) $(QVMOBJ) g_syscalls.asm
+	cp *.qvm ../../baseef/vm/
+
+build_so: $(OBJ) $(SOOBJ)
+	$(CC) -shared -Wl,--export-dynamic,-soname,qagame$(ARCH).so -o qagame$(ARCH).so $(OBJ) $(SOOBJ)
+	cp *.so ../../baseef/
+	
+clean:
+	rm -f *.o *.qvm *.so
Index: Code-DM/game/ai_dmq3.c
===================================================================
--- Code-DM/game/ai_dmq3.c	(revision 1)
+++ Code-DM/game/ai_dmq3.c	(revision 42)
@@ -2285,7 +2285,7 @@
 #ifdef OBSTACLEDEBUG
 	ClientName(bs->client, netname, sizeof(netname));
 	BotAI_Print(PRT_MESSAGE, "%s: I'm blocked by model %d\n", netname, entinfo.modelindex);
-#endif OBSTACLEDEBUG
+#endif
 	//if blocked by a bsp model and the bot wants to activate it if possible
 	if (entinfo.modelindex > 0 && entinfo.modelindex <= max_bspmodelindex && activate) {
 		//find the bsp entity which should be activated in order to remove
@@ -2295,14 +2295,14 @@
 			strcpy(classname, "");
 #ifdef OBSTACLEDEBUG
 			BotAI_Print(PRT_MESSAGE, "%s: can't find activator for blocking entity\n", ClientName(bs->client, netname, sizeof(netname)));
-#endif //OBSTACLEDEBUG
+#endif
 		}
 		else {
 			trap_AAS_ValueForBSPEpairKey(ent, "classname", classname, sizeof(classname));
 #ifdef OBSTACLEDEBUG
 			ClientName(bs->client, netname, sizeof(netname));
 			BotAI_Print(PRT_MESSAGE, "%s: I should activate %s\n", netname, classname);
-#endif OBSTACLEDEBUG
+#endif
 		}
 		if (!strcmp(classname, "func_button")) {
 			//create a bot goal towards the button
Index: Code-DM/game/g_cmds.c
===================================================================
--- Code-DM/game/g_cmds.c	(revision 1)
+++ Code-DM/game/g_cmds.c	(revision 42)
@@ -398,8 +398,12 @@
 int lastKillTime[MAX_CLIENTS];
 void Cmd_Kill_f( gentity_t *ent ) {
 
-	if ( ent->client->sess.sessionTeam == TEAM_SPECTATOR || (ent->client->ps.eFlags&EF_ELIMINATED) ) {
+	if (ent->client->sess.sessionTeam == TEAM_SPECTATOR || (ent->client->ps.eFlags & EF_ELIMINATED))
 		return;
+	if(g_pModAssimilation.integer && ent->client->sess.sessionClass != PC_BORG)
+	{
+		// Disallow suicides by feds so they can't cheat their way out of dangerous situations.
+		return;
 	}
 	if ( lastKillTime[ent->client->ps.clientNum] > level.time - 30000 )
 	{//can't flood-kill
Index: Code-DM/game/g_combat.c
===================================================================
--- Code-DM/game/g_combat.c	(revision 1)
+++ Code-DM/game/g_combat.c	(revision 42)
@@ -224,7 +224,7 @@
 	"MOD_QUANTUM_ALT_SPLASH",
 
 	"MOD_DETPACK",
-	"MOD_SEEKER"
+	"MOD_SEEKER",
 
 //expansion pack
 	"MOD_KNOCKOUT",
@@ -336,7 +336,7 @@
 	if ( meansOfDeath < 0 || meansOfDeath >= sizeof( modNames ) / sizeof( modNames[0] ) ) {
 		obit = "<bad obituary>";
 	} else {
-		obit = modNames[ meansOfDeath ];
+		obit = modNames[meansOfDeath];
 	}
 
 	G_LogPrintf("Kill: %i %i %i: %s killed %s by %s\n", 
Index: Code-DM/game/q_shared.c
===================================================================
--- Code-DM/game/q_shared.c	(revision 1)
+++ Code-DM/game/q_shared.c	(revision 42)
@@ -38,11 +38,21 @@
 COM_StripExtension
 ============
 */
-void COM_StripExtension( const char *in, char *out ) {
-	while ( *in && *in != '.' ) {
-		*out++ = *in++;
+void COM_StripExtension(const char *in, char *out, int destsize)
+{
+	int		length;
+
+	Q_strncpyz(out, in, destsize);
+
+	length = strlen(out)-1;
+	while (length > 0 && out[length] != '.')
+	{
+		length--;
+		if (out[length] == '/')
+		return;         // no extension
 	}
-	*out = 0;
+	if (length)
+		out[length] = 0;
 }
 
 
@@ -577,6 +587,23 @@
 	return sp;
 }
 
+char* Q_strstr(const char *string, const char *substring)
+{
+	int slen = strlen(string);
+	int sublen = strlen(substring);
+
+	while(slen >= sublen)
+	{
+		if(!Q_stricmpn(string, substring, sublen))
+			return (char *) string;
+		
+		string++;
+		slen--;
+	}
+	
+	return NULL;
+}
+
 /*
 =============
 Q_strncpyz
@@ -741,7 +768,27 @@
 	return string;
 }
 
+char *Q_StripColor(char *string)
+{
+	char*	d;
+	char*	s;
+	int		c;
 
+	s = string;
+	d = string;
+	while ((c = *s) != 0 ) {
+		if (Q_IsColorString(s))
+			s++;
+		else
+			*d++ = c;
+
+		s++;
+	}
+	*d = '\0';
+
+	return string;
+}
+
 void QDECL Com_sprintf( char *dest, int size, const char *fmt, ...) {
 	int		len;
 	va_list		argptr;
Index: Code-DM/game/q_shared.h
===================================================================
--- Code-DM/game/q_shared.h	(revision 1)
+++ Code-DM/game/q_shared.h	(revision 42)
@@ -74,6 +74,16 @@
 
 #endif
 
+// Needed for mods compiled in 64 bit shared objects.
+#ifdef Q3_VM
+	typedef int intptr_t;
+#else
+	#ifdef _MSC_VER
+		#include <stddef.h>
+	#else
+		#include <stdint.h>
+	#endif
+#endif
 
 // this is the define for determining if we have an asm version of a C function
 #if (defined _M_IX86 || defined __i386__) && !defined __sun__  && !defined __LCC__
@@ -225,6 +235,8 @@
 
 #define	MAX_NAME_LENGTH		32		// max length of a client name
 
+#define MAX_IGNORE_LENGTH	4096		// max length of ignored clients
+
 //client->sess.sessionClass and client->ps.persistant[PERS_CLASS]
 typedef enum
 {//FIXME: restrict pickups to the proper PC?
@@ -526,8 +538,11 @@
 #define VectorSet(v, x, y, z)	((v)[0]=(x), (v)[1]=(y), (v)[2]=(z))
 #define Vector4Copy(a,b)		((b)[0]=(a)[0],(b)[1]=(a)[1],(b)[2]=(a)[2],(b)[3]=(a)[3])
 
-#define	SnapVector(v) {v[0]=(int)v[0];v[1]=(int)v[1];v[2]=(int)v[2];}
+extern void init_tonextint(qboolean verbose);
+extern float tonextint(float x);
 
+#define	SnapVector(v) {v[0] = tonextint(v[0]); v[1] = tonextint(v[1]); v[2]= tonextint(v[2]);}
+
 // just in case you do't want to use the macros
 vec_t _DotProduct( const vec3_t v1, const vec3_t v2 );
 void _VectorSubtract( const vec3_t veca, const vec3_t vecb, vec3_t out );
@@ -607,7 +622,7 @@
 float Com_Clamp( float min, float max, float value );
 
 char	*COM_SkipPath( char *pathname );
-void	COM_StripExtension( const char *in, char *out );
+void	COM_StripExtension(const char *in, char *out, int destsize);
 void	COM_DefaultExtension( char *path, int maxSize, const char *extension );
 
 void	COM_BeginParseSession( void );
@@ -658,6 +673,7 @@
 char	*Q_strlwr( char *s1 );
 char	*Q_strupr( char *s1 );
 char	*Q_strrchr( const char* string, int c );
+char *Q_strstr(const char *string, const char *substring);
 
 // buffer size safe library replacements
 void	Q_strncpyz( char *dest, const char *src, int destsize );
@@ -665,8 +681,10 @@
 
 // strlen that discounts Quake color sequences
 int Q_PrintStrlen( const char *string );
-// removes color sequences from string
+// removes color sequences and special chars from string
 char *Q_CleanStr( char *string );
+// removed color sequences from string
+char *Q_StripColor(char *string);
 
 //=============================================
 
@@ -1134,4 +1152,10 @@
 	AIGT_OTHER			// anything else!
 } aiGametype_t;
 
+/* Ignore variables for client side system */
+// entry seperator for ignore entries in the cvar. must be a character that clients cannot use in names.
+#define IGNORE_CVARNAME "cg_ignoredPlayers"
+#define IGNORE_SEP '\3'
+#define IGNORE_SEP2 "\3"
+
 #endif	// __Q_SHARED_H
Index: Code-DM/game/ai_team.c
===================================================================
--- Code-DM/game/ai_team.c	(revision 1)
+++ Code-DM/game/ai_team.c	(revision 42)
@@ -34,7 +34,7 @@
 //ctf task preferences for a client
 typedef struct bot_ctftaskpreference_s
 {
-	char		name[36];
+	char		name[MAX_NAME_LENGTH];
 	int			preference;
 } bot_ctftaskpreference_t;
 
Index: Code-DM/game/botai.h
===================================================================
--- Code-DM/game/botai.h	(revision 1)
+++ Code-DM/game/botai.h	(revision 42)
@@ -13,7 +13,7 @@
  *****************************************************************************/
 
 //some maxs
-#define MAX_NETNAME				36
+#define MAX_NETNAME			MAX_NAME_LENGTH
 #define MAX_FILEPATH			144
 
 //bot settings
Index: Code-DM/game/bg_lib.h
===================================================================
--- Code-DM/game/bg_lib.h	(revision 1)
+++ Code-DM/game/bg_lib.h	(revision 42)
@@ -3,6 +3,8 @@
 
 // This file is NOT included on native builds
 
+#ifdef Q3_VM
+
 typedef int size_t;
 
 typedef char *  va_list;
@@ -67,3 +69,4 @@
 int abs( int n );
 double fabs( double x );
 
+#endif // Q3_VM
Index: Code-DM/game/g_client.c
===================================================================
--- Code-DM/game/g_client.c	(revision 1)
+++ Code-DM/game/g_client.c	(revision 42)
@@ -811,11 +811,21 @@
 			break;
 		}
 
+		// don't allow non printable characters. See file
+		// gfx/2d/charsgrid_med in EliteForce's pak0.pk3 to see which
+		// these are.
+		if((unsigned char) ch < 32 ||
+		   ((unsigned char) ch > 127 &&
+		   (unsigned char) ch != 159 && (unsigned char) ch != 161 &&
+		   (unsigned char) ch != 169 && (unsigned char) ch != 174 &&
+		   (unsigned char) ch < 191))
+			ch = '.';
+
 		// don't allow leading spaces
 		if( !*p && ch == ' ' ) {
 			continue;
 		}
-
+		
 		// check colors
 		if( ch == Q_COLOR_ESCAPE ) {
 			// solo trailing carat is not a color prefix
@@ -1091,7 +1101,7 @@
 }
 /*
 ===========
-ClientUserInfoChanged
+ClientUserinfoChanged
 
 Called from ClientConnect when the player first connects and
 directly by the server system when the player updates a userinfo variable.
@@ -1576,11 +1586,15 @@
 		return "Banned.";
 	}
 
-	// check for a password
-	value = Info_ValueForKey (userinfo, "password");
-	if ( g_password.string[0] && Q_stricmp( g_password.string, "none" ) &&
-		strcmp( g_password.string, value) != 0) {
-		return "Invalid password";
+	// Let bots connect on password protected servers, too.
+	if (!isBot && strcmp(value, "localhost"))
+	{
+		// check for a password
+		value = Info_ValueForKey (userinfo, "password");
+		if ( g_password.string[0] && Q_stricmp( g_password.string, "none" ) &&
+			strcmp( g_password.string, value) != 0) {
+			return "Invalid password";
+		}
 	}
 
 	// they can connect
@@ -2093,7 +2107,7 @@
 
 
 	// toggle the teleport bit so the client knows to not lerp
-	flags = ent->client->ps.eFlags & EF_TELEPORT_BIT;
+	flags = ent->client->ps.eFlags & (EF_TELEPORT_BIT | EF_VOTED);
 	flags ^= EF_TELEPORT_BIT;
 
 	// clear everything but the persistant data
@@ -2478,6 +2492,16 @@
 		ClientUserinfoChanged( level.sortedClients[0] );
 	}
 
+	if( g_gametype.integer == GT_TOURNAMENT &&
+		ent->client->sess.sessionTeam == TEAM_FREE &&
+		level.intermissiontime ) {
+
+		trap_SendConsoleCommand( EXEC_APPEND, "map_restart 0\n" );
+		level.restarted = qtrue;
+		level.changemap = NULL;
+		level.intermissiontime = 0;
+	}
+
 	trap_UnlinkEntity (ent);
 	ent->s.modelindex = 0;
 	ent->inuse = qfalse;
Index: Code-DM/qcommon/stv_version.h
===================================================================
--- Code-DM/qcommon/stv_version.h	(revision 1)
+++ Code-DM/qcommon/stv_version.h	(revision 42)
@@ -1,5 +1,5 @@
 // Current version of holomatch game
 
-#define	Q3_VERSION		"ST:V HM v1.20"
+#define	Q3_VERSION		"ioST:V HM v1.37"
 
 // end
Index: Code-DM/cgame/cg_local.h
===================================================================
--- Code-DM/cgame/cg_local.h	(revision 1)
+++ Code-DM/cgame/cg_local.h	(revision 42)
@@ -395,7 +395,7 @@
 typedef struct {
 	qboolean		infoValid;
 
-	char			name[MAX_QPATH];
+	char			name[MAX_NAME_LENGTH];
 	team_t			team;
 	pclass_t		pClass;
 
@@ -445,6 +445,8 @@
 
 	sfxHandle_t		sounds[MAX_CUSTOM_SOUNDS];
 	int				numTaunts;
+
+	qboolean		ignore;			// ignore all text messages from this player.
 } clientInfo_t;
 
 
@@ -1357,6 +1359,10 @@
 void CG_NewClientInfo( int clientNum );
 sfxHandle_t	CG_CustomSound( int clientNum, const char *soundName );
 
+qboolean CG_IsIgnored(char *testnick);
+qboolean CG_AddIgnore(char *newignore);
+void CG_DelIgnore(char *newignore, qboolean substring);
+
 //
 // cg_predict.c
 //
Index: Code-DM/cgame/cg_weapons.c
===================================================================
--- Code-DM/cgame/cg_weapons.c	(revision 1)
+++ Code-DM/cgame/cg_weapons.c	(revision 42)
@@ -95,7 +95,7 @@
 //	}
 
 	strcpy( path, item->view_model );
-	COM_StripExtension( path, path );
+	COM_StripExtension(path, path, sizeof(path));
 	strcat( path, "_flash.md3" );
 	weaponInfo->flashModel = trap_R_RegisterModel( path );
 
@@ -109,7 +109,7 @@
 	}
 	for (i=0; i< numBarrels; i++) {
 		Q_strncpyz( path, item->view_model, MAX_QPATH );
-		COM_StripExtension( path, path );
+		COM_StripExtension(path, path, sizeof(path));
 		if (i)
 		{
 			strcat( path, va("_barrel%d.md3", i+1));
@@ -120,7 +120,7 @@
 	}
 
 	strcpy( path, item->view_model );
-	COM_StripExtension( path, path );
+	COM_StripExtension(path, path, sizeof(path));
 	strcat( path, "_hand.md3" );
 	weaponInfo->handsModel = trap_R_RegisterModel( path );
 
Index: Code-DM/cgame/cg_players.c
===================================================================
--- Code-DM/cgame/cg_players.c	(revision 1)
+++ Code-DM/cgame/cg_players.c	(revision 42)
@@ -587,6 +587,9 @@
 	v = Info_ValueForKey(configstring, "n");
 	Q_strncpyz( newInfo.name, v, sizeof( newInfo.name ) );
 
+	if(CG_IsIgnored(newInfo.name) || (ci->infoValid && ci->ignore))
+		newInfo.ignore = qtrue;
+
 	// colors
 	v = Info_ValueForKey( configstring, "c1" );
 	CG_ColorFromString( v, newInfo.color );
@@ -2164,3 +2167,153 @@
 	}
 }
 
+/************* IGNORE STUFF *************/
+
+/*
+===============
+CG_FindIgnore
+
+Find an ignore entry.
+===============
+*/
+
+char *CG_FindIgnore(char *ignores, char *findentry, int substring)
+{
+	char *ignored = ignores, *end;
+	int foundcount = 0, iglen = strlen(findentry);
+
+	while(ignored = Q_strstr(ignored, findentry))
+	{
+		// find the end of the entry
+		for(end = ignored + 1; *end && *(end - 1) != IGNORE_SEP; end++);
+
+		if(substring)
+		{
+			// we found parts of the string in an ignore.
+			
+			// now get the start of the entry, not the substring.
+			while(ignores != ignored && *(ignored-1) != IGNORE_SEP)
+			{
+				ignored--;
+			}
+			
+			foundcount++;
+
+			if(foundcount >= substring)
+				break;
+			
+			ignored = end;
+		}
+		else
+		{
+			// Make sure that this is not a substring
+			if((ignored != ignores && *(ignored-1) != IGNORE_SEP) ||
+			   (ignored[iglen] != '\0' && ignored[iglen] != IGNORE_SEP))
+			{
+				ignored = end;
+				continue;
+			}
+		
+			break;
+		}
+	}
+	
+	return ignored;
+}
+
+
+
+/*
+===============
+CG_IsIgnored
+
+Checks whether a certain nick is ignored.
+===============
+*/
+
+qboolean CG_IsIgnored(char *testnick)
+{
+	char ignores[MAX_IGNORE_LENGTH];
+	char tnick[sizeof(cgs.clientinfo[0].name)];
+
+	Q_strncpyz(tnick, testnick, sizeof(tnick));
+	Q_StripColor(tnick);
+
+	trap_Cvar_VariableStringBuffer(IGNORE_CVARNAME, ignores, sizeof(ignores));
+	
+	if(CG_FindIgnore(ignores, tnick, 0))
+		return qtrue;
+
+	return qfalse;
+}
+
+/*
+===============
+CG_AddIgnore
+
+Add a playername to cg_ignoredPlayers cvar
+===============
+*/
+
+qboolean CG_AddIgnore(char *newignore)
+{
+	char curignored[MAX_IGNORE_LENGTH];
+	int newiglen = strlen(newignore);
+
+	trap_Cvar_VariableStringBuffer(IGNORE_CVARNAME, curignored, sizeof(curignored));
+	
+	if(CG_FindIgnore(curignored, newignore, 0))
+		return qfalse;		// Already in list.
+
+	if(strlen(curignored) + strlen(newignore) + 1 >= sizeof(curignored))
+	{
+		CG_Printf("Warning: ignored players list is full!\n");
+		return qfalse;
+	}
+
+	Q_strcat(curignored, sizeof(curignored), newignore);
+	Q_strcat(curignored, sizeof(curignored), IGNORE_SEP2);
+
+	trap_Cvar_Set(IGNORE_CVARNAME, curignored);
+	return qtrue;
+}
+
+/*
+===============
+CG_DelIgnore
+
+Remove a playername from the cg_ignoredPlayers cvar
+===============
+*/
+
+void CG_DelIgnore(char *delignore, qboolean substring)
+{
+	char curignored[MAX_IGNORE_LENGTH];
+	char *ignptr, *start;
+	int restlen, dellen;
+	qboolean waslast = qfalse;
+	
+	trap_Cvar_VariableStringBuffer(IGNORE_CVARNAME, curignored, sizeof(curignored));
+
+	while((start = CG_FindIgnore(curignored, delignore, substring ? 1 : 0)))
+	{
+		ignptr = start;
+		for(; *ignptr && *(ignptr) != IGNORE_SEP; ignptr++);
+
+		if(!ignptr)
+			waslast = qtrue;
+		else
+			*ignptr = '\0';
+			
+		CG_Printf("Unignoring player %s\n", start);
+
+		if(waslast)
+			break;
+
+		ignptr++;
+		restlen = strlen(ignptr);
+		memmove(start, ignptr, restlen+1);
+	}
+	
+	trap_Cvar_Set(IGNORE_CVARNAME, curignored);
+}
Index: Code-DM/cgame/Makefile
===================================================================
--- Code-DM/cgame/Makefile	(revision 0)
+++ Code-DM/cgame/Makefile	(revision 42)
@@ -0,0 +1,122 @@
+default: qvm
+qvm: build_qvm
+so: build_so
+
+# bins for building VMs (you need all q3lcc, q3rcc, q3cpp and q3asm in the same dir.)
+Q3LCC = ../../bin/q3lcc
+Q3ASM = ../../bin/q3asm
+
+# compiler to use for building shared objects
+CC = gcc
+
+# cflags for the VM compiler
+VMCFLAGS = $(CFLAGS) -DQ3_VM
+# cflags for the compiler
+SOCFLAGS = $(CFLAGS) -g3 -ggdb3 -fPIC
+
+ARCH=$(shell uname -m | sed -e s/i.86/i386/)
+
+OBJ = \
+  cg_main.o \
+  cg_consolecmds.o \
+  cg_draw.o \
+  cg_drawtools.o \
+  cg_effects.o \
+  cg_ents.o \
+  cg_env.o \
+  cg_event.o \
+  cg_info.o \
+  cg_localents.o \
+  cg_marks.o \
+  cg_players.o \
+  cg_playerstate.o \
+  cg_predict.o \
+  cg_scoreboard.o \
+  cg_screenfx.o \
+  cg_servercmds.o \
+  cg_snapshot.o \
+  cg_view.o \
+  cg_weapons.o \
+  fx_borg.o \
+  fx_compression.o \
+  fx_dreadnought.o \
+  fx_grenade.o \
+  fx_imod.o \
+  fx_item.o \
+  fx_lib.o \
+  fx_misc.o \
+  fx_phaser.o \
+  fx_quantum.o \
+  fx_scavenger.o \
+  fx_stasis.o \
+  fx_tetrion.o \
+  fx_transporter.o \
+
+
+OBJDEP = \
+  ../game/q_shared.o \
+  ../game/q_math.o \
+  ../game/bg_misc.o \
+  ../game/bg_pmove.o \
+  ../game/bg_slidemove.o \
+  
+SOOBJ = \
+  cg_syscalls.o \
+
+QVMOBJ = \
+  ../game/bg_lib.o \
+
+DO_VMCC = $(Q3LCC) $(VMCFLAGS) -o $@ -c $<
+DO_SOCC = $(CC) $(SOCFLAGS) -o $@ -c $<
+
+build_qvm: DO_CC=$(DO_VMCC)
+build_so: DO_CC=$(DO_SOCC)
+
+cg_consolecmds.o : cg_consolecmds.c; $(DO_CC)
+cg_draw.o : cg_draw.c; $(DO_CC)
+cg_drawtools.o : cg_drawtools.c; $(DO_CC)
+cg_effects.o : cg_effects.c; $(DO_CC)
+cg_ents.o : cg_ents.c; $(DO_CC)
+cg_env.o : cg_env.c; $(DO_CC)
+cg_event.o : cg_event.c; $(DO_CC)
+cg_info.o : cg_info.c; $(DO_CC)
+cg_localents.o : cg_localents.c; $(DO_CC)
+cg_main.o : cg_main.c; $(DO_CC)
+cg_marks.o : cg_marks.c; $(DO_CC)
+cg_players.o : cg_players.c; $(DO_CC)
+cg_playerstate.o : cg_playerstate.c; $(DO_CC)
+cg_predict.o : cg_predict.c; $(DO_CC)
+cg_scoreboard.o : cg_scoreboard.c; $(DO_CC)
+cg_screenfx.o : cg_screenfx.c; $(DO_CC)
+cg_servercmds.o : cg_servercmds.c; $(DO_CC)
+cg_snapshot.o : cg_snapshot.c; $(DO_CC)
+cg_view.o : cg_view.c; $(DO_CC)
+cg_weapons.o : cg_weapons.c; $(DO_CC)
+fx_borg.o : fx_borg.c; $(DO_CC)
+fx_compression.o : fx_compression.c; $(DO_CC)
+fx_dreadnought.o : fx_dreadnought.c; $(DO_CC)
+fx_grenade.o : fx_grenade.c; $(DO_CC)
+fx_imod.o : fx_imod.c; $(DO_CC)
+fx_item.o : fx_item.c; $(DO_CC)
+fx_lib.o : fx_lib.c; $(DO_CC)
+fx_misc.o : fx_misc.c; $(DO_CC)
+fx_phaser.o : fx_phaser.c; $(DO_CC)
+fx_quantum.o : fx_quantum.c; $(DO_CC)
+fx_scavenger.o : fx_scavenger.c; $(DO_CC)
+fx_stasis.o : fx_stasis.c; $(DO_CC)
+fx_tetrion.o : fx_tetrion.c; $(DO_CC)
+fx_transporter.o : fx_transporter.c; $(DO_CC)
+
+cg_syscalls.o : cg_syscalls.c; $(DO_CC)
+
+
+build_qvm: $(OBJ) $(QVMOBJ)
+	$(Q3ASM) -vq3 -o cgame.qvm $(OBJ) $(OBJDEP) $(QVMOBJ) cg_syscalls.asm
+	cp *.qvm ../../baseef/vm/
+
+build_so: $(OBJ) $(SOOBJ)
+	$(CC) -shared -Wl,--export-dynamic,-soname,cgame$(ARCH).so -o cgame$(ARCH).so $(OBJ) $(OBJDEP) $(SOOBJ)
+	cp *.so ../../baseef/
+
+clean:
+	rm -f *.o *.qvm *.so
Index: Code-DM/cgame/cg_info.c
===================================================================
--- Code-DM/cgame/cg_info.c	(revision 1)
+++ Code-DM/cgame/cg_info.c	(revision 42)
@@ -77,7 +77,7 @@
 void CG_LoadingClient( int clientNum ) {
 	const char		*info;
 	char			*skin;
-	char			personality[MAX_QPATH];
+	char			personality[MAX_NAME_LENGTH];
 	char			model[MAX_QPATH];
 	char			iconName[MAX_QPATH];
 
Index: Code-DM/cgame/cg_syscalls.c
===================================================================
--- Code-DM/cgame/cg_syscalls.c	(revision 1)
+++ Code-DM/cgame/cg_syscalls.c	(revision 42)
@@ -4,10 +4,10 @@
 // cg_syscalls.asm is included instead when building a qvm
 #include "cg_local.h"
 
-static int (QDECL *syscall)( int arg, ... ) = (int (QDECL *)( int, ...))-1;
+static intptr_t (QDECL *syscall)( intptr_t arg, ... ) = (intptr_t (QDECL *)( intptr_t, ...))-1;
 
 
-void dllEntry( int (QDECL  *syscallptr)( int arg,... ) ) {
+void dllEntry( intptr_t (QDECL  *syscallptr)( intptr_t arg,... ) ) {
 	syscall = syscallptr;
 }
 
Index: Code-DM/cgame/cg_draw.c
===================================================================
--- Code-DM/cgame/cg_draw.c	(revision 1)
+++ Code-DM/cgame/cg_draw.c	(revision 42)
@@ -2119,7 +2119,7 @@
 */
 static void CG_DrawCrosshairNames( void ) {
 	float		*color;
-	char		name[MAX_QPATH];
+	char		name[MAX_NAME_LENGTH];
 	int			team;
 
 	if ( !cg_drawCrosshair.integer ) 
Index: Code-DM/cgame/cg_consolecmds.c
===================================================================
--- Code-DM/cgame/cg_consolecmds.c	(revision 1)
+++ Code-DM/cgame/cg_consolecmds.c	(revision 42)
@@ -124,7 +124,121 @@
 	trap_SendClientCommand( command );
 }
 
+static void CG_Ignore_f(void)
+{
+	int clientNum;
+	char clientName[sizeof(cgs.clientinfo[0].name)] = "";
+	char strsub[2];
+	char tname[sizeof(clientName)];
+	clientInfo_t *curclient;
+	qboolean substring = qfalse;
+	
+	trap_Argv(1, clientName, sizeof(clientName));
 
+	trap_Argv(2, strsub, sizeof(strsub));
+	if(*strsub && atoi(strsub))
+		substring = qtrue;
+
+	if(*clientName)
+	{
+		Q_StripColor(clientName);
+
+		// user specified in console which nick to ignore
+		for(curclient = cgs.clientinfo; (curclient - cgs.clientinfo) < MAX_CLIENTS; curclient++)
+		{
+			if(!curclient->infoValid)
+				continue;
+			
+			Q_strncpyz(tname, curclient->name, sizeof(tname));
+			Q_StripColor(tname);
+
+			if((!substring && !Q_stricmp(tname, clientName)) || (substring && Q_strstr(tname, clientName)))
+			{
+				curclient->ignore = qtrue;
+				if(substring && CG_AddIgnore(tname))
+					Com_Printf("Ignoring player %s\n", tname);
+			}
+		}
+		
+		if(!substring && CG_AddIgnore(clientName))
+			Com_Printf("Ignoring player %s\n", clientName);
+	}
+	else
+	{
+		clientNum = CG_CrosshairPlayer();
+		if(clientNum >= 0)
+		{
+			curclient = &cgs.clientinfo[clientNum];
+			curclient->ignore = qtrue;
+
+			Q_strncpyz(tname, curclient->name, sizeof(tname));
+			Q_StripColor(tname);
+
+			if(CG_AddIgnore(tname))
+				Com_Printf("Ignoring player %s\n", tname);
+		}
+	}
+}
+
+static void CG_Unignore_f(void)
+{
+	int clientNum;
+	char clientName[sizeof(cgs.clientinfo[0].name)] = "";
+	char strsub[2];
+	char tname[sizeof(clientName)];
+	clientInfo_t *curclient;
+	qboolean substring = qfalse;
+	
+	trap_Argv(1, clientName, sizeof(clientName));
+	trap_Argv(2, strsub, sizeof(strsub));
+	if(*strsub && atoi(strsub))
+		substring = qtrue;
+	
+	if(*clientName)
+	{
+		Q_StripColor(clientName);
+
+		// user specified in console which nick to ignore
+		for(curclient = cgs.clientinfo; (curclient - cgs.clientinfo) < MAX_CLIENTS; curclient++)
+		{
+			if(!curclient->infoValid)
+				continue;
+			
+			Q_strncpyz(tname, curclient->name, sizeof(tname));
+			Q_StripColor(tname);
+
+			if((!substring && !Q_stricmp(tname, clientName)) || (substring && Q_strstr(tname, clientName)))
+				curclient->ignore = qfalse;
+		}		
+
+		CG_DelIgnore(clientName, substring);
+	}
+	else
+	{
+		clientNum = CG_CrosshairPlayer();
+		if(clientNum >= 0)
+		{
+			curclient = &cgs.clientinfo[clientNum];
+			curclient->ignore = qfalse;
+
+			Q_strncpyz(tname, curclient->name, sizeof(tname));
+			Q_StripColor(tname);
+
+			CG_DelIgnore(tname, 0);
+		}
+	}
+}
+
+static void CG_UnignoreAll_f(void)
+{
+	clientInfo_t *curclient;
+
+	for(curclient = cgs.clientinfo; (curclient - cgs.clientinfo) < MAX_CLIENTS; curclient++)
+		curclient->ignore = qfalse;
+		
+	trap_Cvar_Set(IGNORE_CVARNAME, "");
+}
+
 typedef struct {
 	char	*cmd;
 	void	(*function)(void);
@@ -153,7 +267,9 @@
 	{ "loaddefered", CG_LoadDeferredPlayers },	// spelled wrong, but not changing for demo...
 	{ "+analysis", CG_ObjectivesDown_f },
 	{ "-analysis", CG_ObjectivesUp_f },
-
+	{ "ignore", CG_Ignore_f },
+	{ "unignore", CG_Unignore_f },
+	{ "unignoreall", CG_UnignoreAll_f }
 };
 
 
@@ -217,5 +333,8 @@
 	trap_AddCommand ("vote");
 	trap_AddCommand ("callvote");
 	trap_AddCommand ("loaddefered");	// spelled wrong, but not changing for demo
+	trap_AddCommand ("ignore");
+	trap_AddCommand ("unignore");
+	trap_AddCommand ("unignoreall");
 }
 
Index: Code-DM/cgame/cg_servercmds.c
===================================================================
--- Code-DM/cgame/cg_servercmds.c	(revision 1)
+++ Code-DM/cgame/cg_servercmds.c	(revision 42)
@@ -215,7 +215,7 @@
 		cg.intermissionStarted = atoi( str );
 	} else if ( num >= CS_MODELS && num < CS_MODELS+MAX_MODELS ) {
 		cgs.gameModels[ num-CS_MODELS ] = trap_R_RegisterModel( str );
-	} else if ( num >= CS_SOUNDS && num < CS_SOUNDS+MAX_MODELS ) {
+	} else if ( num >= CS_SOUNDS && num < CS_SOUNDS+MAX_SOUNDS ) {
 		if ( str[0] != '*' ) {	// player specific sounds don't register here
 			cgs.gameSounds[ num-CS_SOUNDS] = trap_S_RegisterSound( str );
 		}
@@ -344,7 +344,72 @@
 	}
 }
 
+/*
+=================
+CG_PrintChat
 
+Print a chat message but check for ignored players.
+=================
+*/
+
+static void CG_PrintChat(const char *chatstring, int chattype)
+{
+	clientInfo_t *curclient;
+	const char *chatptr = chatstring;
+	int namelen;
+	
+	for(curclient = cgs.clientinfo; (curclient - cgs.clientinfo) < MAX_CLIENTS; curclient++)
+	{
+		if(curclient->infoValid && curclient->ignore)
+		{
+			namelen = strlen(curclient->name);
+			
+			if(chattype)
+			{
+				if(chatptr[0] == '(' &&
+				   !Q_stricmpn(chatptr+1, curclient->name, namelen) &&
+				   chatptr[namelen+1] == '^' && chatptr[namelen+2] == '7' &&
+				   chatptr[namelen+3] == ')' &&
+				   ((chatptr[namelen+4] == ':' && chatptr[namelen+5] == ' ') ||
+				   (chatptr[namelen+4] == ' ' && chatptr[namelen+5] == '('))
+				  )
+				{
+					// This user is being ingored.
+					return;
+				}
+			}
+			else
+			{
+				if(
+				   (!Q_stricmpn(chatptr, curclient->name, namelen) &&
+				   chatptr[namelen] == '^' && chatptr[namelen+1] == '7' &&
+				   chatptr[namelen+2] == ':' && chatptr[namelen+3] == ' ')
+				   ||
+				   (chatptr[0] == '[' &&
+				   !Q_stricmpn(chatptr+1, curclient->name, namelen) &&
+				   chatptr[namelen+1] == '^' && chatptr[namelen+2] == '7' &&
+				   chatptr[namelen+3] == ']' &&
+				   ((chatptr[namelen+4] == ':' && chatptr[namelen+5] == ' ') ||
+				    (chatptr[namelen+4] == ' ' && chatptr[namelen+5] == '('))
+				   )
+				  )
+				{
+					// This user is being ignored.
+					return;
+				}
+			}
+		}
+		
+	}
+
+	trap_S_StartLocalSound(cgs.media.talkSound, CHAN_LOCAL_SOUND);
+
+	if(chattype)
+		CG_AddToTeamChat(chatstring);
+
+	CG_Printf("%s\n", chatstring);
+}
+
 /*
 =================
 CG_ServerCommand
@@ -379,8 +444,7 @@
 	}
 
 	if ( !strcmp( cmd, "chat" ) ) {
-		trap_S_StartLocalSound( cgs.media.talkSound, CHAN_LOCAL_SOUND );
-		CG_Printf( "%s\n", CG_Argv(1) );
+		CG_PrintChat(CG_Argv(1), 0);
 		return;
 	}
 
@@ -390,9 +454,7 @@
 	}
 
 	if ( !strcmp( cmd, "tchat" ) ) {
-		trap_S_StartLocalSound( cgs.media.talkSound, CHAN_LOCAL_SOUND );
-		CG_AddToTeamChat( CG_Argv(1) );
-		CG_Printf( "%s\n", CG_Argv(1) );
+		CG_PrintChat(CG_Argv(1), 1);
 		return;
 	}
 
Index: Code-DM/cgame/cg_main.c
===================================================================
--- Code-DM/cgame/cg_main.c	(revision 1)
+++ Code-DM/cgame/cg_main.c	(revision 42)
@@ -20,7 +20,7 @@
 This must be the very first function compiled into the .q3vm file
 ================
 */
-int vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6 ) {
+intptr_t vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6 ) {
 	switch ( command ) {
 	case CG_INIT:
 		CG_Init( arg0, arg1 );
@@ -215,6 +215,10 @@
 	// see if we are also running the server on this machine
 	trap_Cvar_VariableStringBuffer( "sv_running", var, sizeof( var ) );
 	cgs.localServer = atoi( var );
+	
+	// Register the ignored players cvar. We can't use a vmCvar_t anyways as we need
+	// way larger string values than just 256.
+	trap_Cvar_Register (NULL, IGNORE_CVARNAME, "", CVAR_ARCHIVE | CVAR_ROM);
 }
 
 /*
@@ -520,7 +524,7 @@
 	CG_LoadingString( "item sounds" );
 
 	// only register the items that the server says we need
-	strcpy( items, CG_ConfigString( CS_ITEMS ) );
+	Q_strncpyz(items, CG_ConfigString(CS_ITEMS), sizeof(items));
 
 	for ( i = 1 ; i < bg_numItems ; i++ ) {
 		if ( items[ i ] == '1' || cg_buildScript.integer ) {
@@ -868,7 +872,7 @@
 	//don't need a 	CG_LoadingString because there will be one in the LoadingItem()
 
 	// only register the items that the server says we need
-	strcpy( items, CG_ConfigString( CS_ITEMS) );
+	Q_strncpyz(items, CG_ConfigString(CS_ITEMS), sizeof(items));
 
 	for ( i = 1 ; i < bg_numItems ; i++ ) {
 		if ( items[ i ] == '1' || cg_buildScript.integer ) {
@@ -1088,6 +1092,8 @@
 	memset( cg_weapons, 0, sizeof(cg_weapons) );
 	memset( cg_items, 0, sizeof(cg_items) );
 
+	init_tonextint(qfalse);
+
 	cgs.processedSnapshotNum = serverMessageNum;
 	cgs.serverCommandSequence = serverCommandSequence;
 
@@ -1345,7 +1351,7 @@
 	char	fullFileName[MAX_QPATH];
 	char	objtext[MAX_OBJ_TEXT_LENGTH];
 
-	COM_StripExtension( cgs.mapname, fileName );
+	COM_StripExtension(cgs.mapname, fileName, sizeof(fileName));
 	CG_LanguageFilename( fileName, "efo", fullFileName);
 
 	len = trap_FS_FOpenFile( fullFileName, &f, FS_READ );
Index: Code-DM/Makefile
===================================================================
--- Code-DM/Makefile	(revision 0)
+++ Code-DM/Makefile	(revision 42)
@@ -0,0 +1,16 @@
+default: build
+
+build_qvm:
+	$(MAKE) -C game build_qvm
+	$(MAKE) -C cgame build_qvm
+	$(MAKE) -C ui build_qvm
+
+build_so:
+	$(MAKE) -C game build_so
+	$(MAKE) -C cgame build_so
+	$(MAKE) -C ui build_so
+
+clean:
+	$(MAKE) -C game clean
+	$(MAKE) -C cgame clean
+	$(MAKE) -C ui clean
Index: Code-DM/ui/ui.bat
===================================================================
--- Code-DM/ui/ui.bat	(revision 1)
+++ Code-DM/ui/ui.bat	(revision 42)
@@ -78,6 +78,8 @@
 @if errorlevel 1 goto quit
 ..\..\..\bin_nt\lcc -DQ3_VM -S -Wf-target=bytecode -Wf-g -I..\..\cgame -I..\..\game -I..\..\ui %1 ../ui_teamorders.c
 @if errorlevel 1 goto quit
+..\..\..\bin_nt\lcc -DQ3_VM -S -Wf-target=bytecode -Wf-g -I..\..\cgame -I..\..\game -I..\..\ui %1 ../ui_ignores.c
+@if errorlevel 1 goto quit
 ..\..\..\bin_nt\lcc -DQ3_VM -S -Wf-target=bytecode -Wf-g -I..\..\cgame -I..\..\game -I..\..\ui %1 ../ui_mods.c
 @if errorlevel 1 goto quit
 ..\..\..\bin_nt\lcc -DQ3_VM -S -Wf-target=bytecode -Wf-g -I..\..\cgame -I..\..\game -I..\..\ui %1 ../ui_cvars.c
Index: Code-DM/ui/ui_servers2.c
===================================================================
--- Code-DM/ui/ui_servers2.c	(revision 1)
+++ Code-DM/ui/ui_servers2.c	(revision 42)
@@ -17,17 +17,23 @@
 static menubitmap_s			s_create_server;
 
 
-#define MAX_GLOBALSERVERS		128
+// TS 29.12.2001
+// #define MAX_GLOBALSERVERS	128
+// #define MAX_LISTBOXITEMS		128
+// #define MAX_LOCALSERVERS		128
+// #define MAX_HOSTNAMELENGTH		22
+#define MAX_GLOBALSERVERS		256
+#define MAX_LISTBOXITEMS		256
+#define MAX_LOCALSERVERS		256
+#define MAX_HOSTNAMELENGTH		24
+
 #define MAX_PINGREQUESTS		16
 #define MAX_ADDRESSLENGTH		64
-#define MAX_HOSTNAMELENGTH		22
 #define MAX_MAPNAMELENGTH		16
-#define MAX_LISTBOXITEMS		128
-#define MAX_LOCALSERVERS		128
 #define MAX_STATUSLENGTH		64
 #define MAX_LISTBOXWIDTH		65 //59
 
-#define ART_UNKNOWNMAP			"levelshots/unknownmap"
+#define ART_UNKNOWNMAP			"levelshots/unknownmap.jpg"
 
 #define ID_MASTER			10
 #define ID_GAMETYPE			11
@@ -69,6 +75,7 @@
 #define GAMES_TEAMPLAY		2
 #define GAMES_TOURNEY		3
 #define GAMES_CTF			4
+
 /*
 static const char *master_items[] = {
 	"Local",
@@ -179,7 +186,9 @@
 	int		maxclients;
 	int		pingtime;
 	int		gametype;
-	char	gamename[12];
+	// TS 29.12.2001
+	// char	gamename[12];
+	char	gamename[13];
 	int		nettype;
 	int		minPing;
 	int		maxPing;
@@ -259,6 +268,72 @@
 
 /*
 =================
+UI_LoadServerList
+=================
+*/
+void UI_LoadServerList()
+{
+	int           len;
+	int           ds_size = sizeof( servernode_t );
+	char	        filename[MAX_QPATH];
+  fileHandle_t  handle = 0;
+  // --
+	UI_LanguageFilename("servlist","dat", filename );
+	// --
+  if ( len = trap_FS_FOpenFile( filename, &handle, FS_READ ) ) 
+  {
+    int servIdx;
+    // --
+    g_numglobalservers = ( len / ds_size );
+    // --
+    for ( servIdx = 0; ( servIdx < g_numglobalservers ); servIdx++ )
+    {
+      trap_FS_Read( &g_globalserverlist[servIdx], ds_size, handle );
+    }
+    // --
+    trap_FS_FCloseFile( handle );
+  }
+  // --
+  trap_Print( va( "Loaded cached servers: %i\n", g_numglobalservers ) );
+}
+
+
+/*
+=================
+UI_SaveServerList
+=================
+*/
+void UI_SaveServerList()
+{
+  fileHandle_t  handle = 0;
+	int           ds_size = sizeof( servernode_t );
+	char	        filename[MAX_QPATH];
+  // --
+	UI_LanguageFilename("servlist","dat", filename );
+	// --
+  trap_FS_FOpenFile( filename, &handle, FS_WRITE );
+  // --
+  if ( handle != 0 )
+  {
+    int servIdx;
+    // --
+    for ( servIdx = 0; ( servIdx < g_numglobalservers ); servIdx++ )
+    {
+      trap_FS_Write( &g_globalserverlist[servIdx], ds_size, handle );
+    }
+    // --
+    trap_FS_FCloseFile( handle );
+  }
+  else
+    trap_Print( va( "Error when saving servers: Could not open file (%s)\n", filename ) );                                     
+  // --
+  trap_Print( va( "Saved servers: %i\n", g_numglobalservers ) );
+}
+
+
+
+/*
+=================
 ArenaServers_MaxPing
 =================
 */
@@ -359,16 +434,37 @@
 static void ArenaServers_UpdatePicture( void ) {
 	static char		picname[64];
 	servernode_t*	servernodeptr;
+	int handle = 0;
 
 	if( !g_arenaservers.list.numitems ) {
 		g_arenaservers.mappic.generic.name = NULL;
 	}
 	else {
 		servernodeptr = g_arenaservers.table[g_arenaservers.list.curvalue].servernode;
-		Com_sprintf( picname, sizeof(picname), "levelshots/%s.tga", servernodeptr->mapname );
-		g_arenaservers.mappic.generic.name = picname;
+		Com_sprintf( picname, sizeof(picname), "levelshots/%s.jpg", servernodeptr->mapname );
+
+    // TS 12.12.2001 -->
+    trap_FS_FOpenFile( picname, &handle, FS_READ );
+    
+    if ( !handle )
+    {
+  		Com_sprintf( picname, sizeof(picname), "levelshots/%s.tga", servernodeptr->mapname );
+      trap_FS_FOpenFile( picname, &handle, FS_READ );
+    }
+  		
+    if ( handle )
+    {
+  		g_arenaservers.mappic.generic.name = picname;    
+  		trap_FS_FCloseFile( handle );
+  	}
+    else  	
+  		g_arenaservers.mappic.generic.name = ART_UNKNOWNMAP;
+  		
+    // TS 12.12.2001 <--
 	}
 
+  // if ( g_arenaservers.mappic.generic.name ) trap_Print( va( "Map-Pic: %s\n", g_arenaservers.mappic.generic.name ) );
+	
 	// force shader update during draw
 	g_arenaservers.mappic.shader = 0;
 }
@@ -542,14 +638,29 @@
 			pingColor = S_COLOR_RED;
 		}
 
-		Com_sprintf( buff, MAX_LISTBOXWIDTH, "%-23.23s %-11.11s %3d/%3d %-8.8s %3s %s%3d", 
-			servernodeptr->hostname, servernodeptr->mapname, servernodeptr->numclients,
-	 		servernodeptr->maxclients, servernodeptr->gamename,
-			netnames[servernodeptr->nettype], pingColor, servernodeptr->pingtime);
-		if (!servernodeptr->isPure) {	//prev length is 62, we can safely add 2 more chars.
+		// TS 29.12.2001
+		Com_sprintf
+		( 
+		 buff, 
+		 MAX_LISTBOXWIDTH, 
+		 "%s%-23.23s %-13.13s %2d/%2d %-13.13s%3d", 
+			pingColor, 
+			servernodeptr->hostname, 
+			servernodeptr->mapname, 
+			servernodeptr->numclients,
+	 		servernodeptr->maxclients, 
+	 		servernodeptr->gamename,
+			/*netnames[servernodeptr->nettype], */
+			servernodeptr->pingtime
+		);
+		
+		if (!servernodeptr->isPure) 
+		{	//prev length is 62, we can safely add 2 more chars.
 			strcat(buff, " *");	//mark this unpure server!
 		}
+		
 		j++;
+		
 	}
 
 //	Com_sprintf( g_arenaservers.status.string, MAX_STATUSLENGTH, "%d of %d Arena Servers.", j, *g_arenaservers.numservers );
@@ -637,7 +748,9 @@
 	char*			s;
 	int				i;
 
-	if ((pingtime >= ArenaServers_MaxPing()) && (g_servertype != AS_FAVORITES))
+	// TS 29.12.2001
+	// if ((pingtime >= ArenaServers_MaxPing()) && (g_servertype != AS_FAVORITES))
+	if ((pingtime > ArenaServers_MaxPing()) && (g_servertype != AS_FAVORITES))
 	{
 		// slow global or local servers do not get entered
 		return;
@@ -656,7 +769,9 @@
 
 	Q_strncpyz( servernodeptr->hostname, Info_ValueForKey( info, "hostname"), MAX_HOSTNAMELENGTH );
 	Q_CleanStr( servernodeptr->hostname );
-	Q_strupr( servernodeptr->hostname );
+	
+	// TS 29.12.2001
+	// Q_strupr( servernodeptr->hostname );
 
 	Q_strncpyz( servernodeptr->mapname, Info_ValueForKey( info, "mapname"), MAX_MAPNAMELENGTH );
 	Q_CleanStr( servernodeptr->mapname );
@@ -664,7 +779,10 @@
 
 	servernodeptr->numclients = atoi( Info_ValueForKey( info, "clients") );
 	servernodeptr->maxclients = atoi( Info_ValueForKey( info, "sv_maxclients") );
-	servernodeptr->pingtime   = pingtime;
+	
+	// TS 29.12.2001
+	servernodeptr->pingtime   = ( ( pingtime == ArenaServers_MaxPing() ) ? 999 : pingtime );
+
 	servernodeptr->minPing    = atoi( Info_ValueForKey( info, "minPing") );
 	servernodeptr->maxPing    = atoi( Info_ValueForKey( info, "maxPing") );
 
@@ -695,8 +813,13 @@
 		i = 5;
 	}
 	if( *s ) {
-		servernodeptr->gametype = -1;
-		Q_strncpyz( servernodeptr->gamename, s, sizeof(servernodeptr->gamename) );
+		
+		// TS 29.12.2001
+		// servernodeptr->gametype = -1;
+		servernodeptr->gametype = i;
+		
+		
+  	Q_strncpyz( servernodeptr->gamename, s, sizeof(servernodeptr->gamename) );
 	}
 	else {
 		servernodeptr->gametype = i;
@@ -865,6 +988,11 @@
 	char	adrstr[MAX_ADDRESSLENGTH];
 	char	info[MAX_INFO_STRING];
 
+  
+  char serverinfo[MAX_INFO_STRING];
+  
+  
+  
 	if (uis.realtime < g_arenaservers.refreshtime)
 	{
 		// wait for timeout or results
@@ -924,11 +1052,15 @@
 				}
 			}
 
+			
 			if (time > maxPing)
 			{
-				// stale it out
-				info[0] = '\0';
-				time    = maxPing;
+				// stale it out 
+				
+				// TS 29.12.2001
+				// info[0] = '\0';
+				
+				time = maxPing;
 			}
 			else
 			{
@@ -1128,6 +1260,10 @@
 
 	for (; i<MAX_FAVORITESERVERS; i++)
 		trap_Cvar_Set( va("server%d",i+1), "" );
+
+  // TS 10.12.2001
+  UI_SaveServerList();
+
 }
 
 
@@ -1422,6 +1558,10 @@
 		break;
 
 	case ID_CONNECT:
+	
+    // TS 10.12.2001
+    UI_SaveServerList();
+    
 		ArenaServers_Go();
 		break;
 
@@ -1471,7 +1611,10 @@
 	UI_DrawProportionalString(  296, 177, menu_normal_text[MNT_MAP],UI_TINYFONT, colorTable[CT_BLACK]);
 	UI_DrawProportionalString(  410, 177, menu_normal_text[MNT_PLAYERS],UI_TINYFONT, colorTable[CT_BLACK]);
 	UI_DrawProportionalString(  456, 177, menu_normal_text[MNT_TYPE],UI_TINYFONT, colorTable[CT_BLACK]);
-	UI_DrawProportionalString(  528, 177, menu_normal_text[MNT_PORT],UI_TINYFONT, colorTable[CT_BLACK]);
+	
+	// TS 29.12.2001
+	// UI_DrawProportionalString(  528, 177, menu_normal_text[MNT_PORT],UI_TINYFONT, colorTable[CT_BLACK]);
+	
 	UI_DrawProportionalString(  569, 177, menu_normal_text[MNT_PING],UI_TINYFONT, colorTable[CT_BLACK]);
 
 	UI_DrawProportionalString(  74,  27, "819",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
@@ -1898,6 +2041,10 @@
 */
 void UI_ArenaServersMenu( void ) 
 {
+  
+  // TS 10.12.2001
+  UI_LoadServerList();
+
 	ArenaServers_MenuInit();
 	UI_PushMenu( &g_arenaservers.menu );
 }						  
Index: Code-DM/ui/ui_playermodel.c
===================================================================
--- Code-DM/ui/ui_playermodel.c	(revision 1)
+++ Code-DM/ui/ui_playermodel.c	(revision 42)
@@ -518,7 +518,7 @@
 		{
 			filelen = strlen(fileptr);
 
-			COM_StripExtension(fileptr,skinname);
+			COM_StripExtension(fileptr, skinname, sizeof(skinname));
 
 			// look for icon_????
 			if (!Q_stricmpn(skinname,"icon_",5))
Index: Code-DM/ui/ui_atoms.c
===================================================================
--- Code-DM/ui/ui_atoms.c	(revision 1)
+++ Code-DM/ui/ui_atoms.c	(revision 42)
@@ -10,7 +10,6 @@
 
 uiStatic_t		uis;
 qboolean		m_entersound;		// after a frame, so caching won't disrupt the sound
-static void UI_LanguageFilename(char *baseName,char *baseExtension,char *finalName);
 void BG_LoadItemNames(void);
 
 // these are here so the functions in q_shared.c can link
@@ -1095,6 +1094,7 @@
 	TeamMain_Cache();
 	UI_AddBots_Cache();
 	UI_RemoveBots_Cache();
+	UI_Ignores_Cache();
 //	UI_LoadConfig_Cache();
 //	UI_SaveConfigMenu_Cache();
 	UI_BotSelectMenu_Cache();
@@ -1166,6 +1166,10 @@
 =================
 */
 void UI_Shutdown( void ) {
+  
+  // TS 10.12.2001
+  UI_SaveServerList();
+  
 }
 
 
@@ -1276,6 +1280,8 @@
 */
 void UI_Init( void ) {
 
+	init_tonextint(qfalse);
+
 	UI_RegisterCvars();
 
 	UI_LoadMenuText();
@@ -1287,6 +1293,9 @@
 	BG_LoadItemNames();
 
 	UI_InitGameinfo();
+	
+	// TS 10.12.2001
+	UI_LoadServerList();
 
 	// cache redundant calulations
 	trap_GetGlconfig( &uis.glconfig );
@@ -1875,7 +1884,7 @@
 	fileHandle_t	f;
 	char	filename[MAX_QPATH];
 
-	UI_LanguageFilename("ext_data/mp_normaltext","dat",filename);
+	UI_LanguageFilename("ext_data/mp_normaltext2", "dat", filename);
 
 	len = trap_FS_FOpenFile( filename, &f, FS_READ );
 
@@ -1979,7 +1988,7 @@
 	int len,i;
 	fileHandle_t	f;
 
-	UI_LanguageFilename("ext_data/mp_buttontext","dat",filename);
+	UI_LanguageFilename("ext_data/mp_buttontext2", "dat", filename);
 
 	len = trap_FS_FOpenFile( filename, &f, FS_READ );
 
@@ -2032,7 +2041,7 @@
 /*
 UI_LanguageFilename - create a filename with an extension based on the value in g_language
 */
-static void UI_LanguageFilename(char *baseName,char *baseExtension,char *finalName)
+void UI_LanguageFilename(char *baseName, char *baseExtension, char *finalName)
 {
 	char	language[32];
 	fileHandle_t	file;
Index: Code-DM/ui/ui_main.c
===================================================================
--- Code-DM/ui/ui_main.c	(revision 1)
+++ Code-DM/ui/ui_main.c	(revision 42)
@@ -20,7 +20,7 @@
 This must be the very first function compiled into the .qvm file
 ================
 */
-int vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6 ) {
+intptr_t vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6 ) {
 	switch ( command ) {
 	case UI_GETAPIVERSION:
 		return UI_API_VERSION;
@@ -277,3 +277,13 @@
 		trap_Cvar_Update( cv->vmCvar );
 	}
 }
+
+/*
+=================
+UI_IsCompat
+=================
+*/
+qboolean UI_NoCompat(void)
+{
+	return ((int) trap_Cvar_VariableValue("com_novmcompat")) ? qtrue : qfalse;
+}
Index: Code-DM/ui/ui.dsp
===================================================================
--- Code-DM/ui/ui.dsp	(revision 1)
+++ Code-DM/ui/ui.dsp	(revision 42)
@@ -246,6 +246,10 @@
 # End Source File
 # Begin Source File
 
+SOURCE=.\ui_ignores.c
+# End Source File
+# Begin Source File
+
 SOURCE=.\ui_video.c
 # End Source File
 # End Group
Index: Code-DM/ui/ui_startserver.c
===================================================================
--- Code-DM/ui/ui_startserver.c	(revision 1)
+++ Code-DM/ui/ui_startserver.c	(revision 42)
@@ -21,7 +21,11 @@
 
 #define	MAX_SERVERSTEXT	8192
 
-#define MAX_SERVERMAPS	64
+// * TS 3.3.2002
+//#define MAX_SERVERMAPS	64
+#define MAX_SERVERMAPS	1024
+// --
+
 #define MAX_NAMELENGTH	24
 
 #define ID_GAMETYPE				10
@@ -189,16 +193,18 @@
 {
 	MNT_TYPE_FREEFORALL,
 	MNT_TYPE_TEAMDEATHMATCH,
-//	MNT_TYPE_TOURNAMENT,
+	MNT_TYPE_TOURNAMENT,
 	MNT_TYPE_CAPTURETHEFLAG,
 	0
 };
 
-//static int gametype_remap[] = {GT_FFA, GT_TEAM, GT_TOURNAMENT, GT_CTF};
+
+// TS 10.12.2001
+static int gametype_remap[] = {GT_FFA, GT_TEAM, GT_TOURNAMENT, GT_CTF};
 //static int gametype_remap2[] = {0, 2, 0, 1, 3};
 
-static int gametype_remap[] = {GT_FFA, GT_TEAM, GT_CTF};
-static int gametype_remap2[] = {0, 0, 0, 1, 2};
+// TS 10.12.2001
+static int gametype_remap2[] = {0, 0, 0, 0, 2};
 
 
 
@@ -231,9 +237,12 @@
 
 		if( Q_stricmp( token, "ffa" ) == 0 ) {
 			bits |= 1 << GT_FFA;
+			// TS 10.12.2001
+			bits |= 1 << GT_TOURNAMENT;
 			continue;
 		}
 
+		// TS 10.12.2001
 		if( Q_stricmp( token, "tourney" ) == 0 ) {
 			bits |= 1 << GT_TOURNAMENT;
 			continue;
@@ -418,9 +427,16 @@
 	count = UI_GetNumArenas();
 	s_startserver.nummaps = 0;
 	matchbits = 1 << gametype_remap[s_startserver.gametype.curvalue];
+
 	if( gametype_remap[s_startserver.gametype.curvalue] == GT_FFA ) {
 		matchbits |= ( 1 << GT_SINGLE_PLAYER );
 	}
+
+	// TS 10.12.2001
+  else if( gametype_remap[s_startserver.gametype.curvalue] == GT_TOURNAMENT ) {
+		matchbits |= ( 1 << GT_SINGLE_PLAYER );
+	}
+
 	for( i = 0; i < count; i++ ) {
 		info = UI_GetArenaInfoByNumber( i );
 
@@ -432,11 +448,15 @@
 		Q_strncpyz( s_startserver.maplist[s_startserver.nummaps], Info_ValueForKey( info, "map"), MAX_NAMELENGTH );
 		Q_strupr( s_startserver.maplist[s_startserver.nummaps] );
 
-		if (ui_language.string[0] == 0 || Q_stricmp ("ENGLISH",ui_language.string)==0 ) {
+		if (ui_language.string[0] == 0 || Q_stricmp ("ENGLISH",ui_language.string)==0 ) 
+		{
 			Q_strncpyz( s_startserver.maplongname[s_startserver.nummaps], Info_ValueForKey( info, "longname"), MAX_NAMELENGTH );
-		} else {
+		} 
+		else 
+		{
 			Q_strncpyz( s_startserver.maplongname[s_startserver.nummaps], Info_ValueForKey( info, va("longname_%s",ui_language.string) ), MAX_NAMELENGTH );
-			if (!s_startserver.maplongname[s_startserver.nummaps][0]) {
+			if (!s_startserver.maplongname[s_startserver.nummaps][0]) 
+			{
 				Q_strncpyz( s_startserver.maplongname[s_startserver.nummaps], Info_ValueForKey( info, "longname"), MAX_NAMELENGTH );
 			}
 		}
@@ -853,12 +873,14 @@
 StartServer_LevelshotDraw
 ===============
 */
+
 static void StartServer_LevelshotDraw( void *self ) {
 	menubitmap_s	*b;
+
 	int				x;
 	int				y;
 	int				n;
-	int				color = CT_DKGOLD1;
+	int				color = CT_WHITE; // TS 3.3.2002
 
 	b = (menubitmap_s *)self;
 
@@ -886,9 +908,8 @@
 	n = (s_startserver.page * MAX_MAPSPERPAGE) + (b->generic.id - ID_PICTURES);
 	if (n == s_startserver.currentmap)
 	{
-		color = CT_LTGOLD1;
+		color = CT_WHITE; // TS 3.3.2002
 	}
-
 	UI_DrawProportionalString( x + 2, y +2, va("%s:%d",menu_normal_text[MNT_RECOMMENDEDPLAYERS],s_startserver.maprecommended[n]), UI_TINYFONT, colorTable[CT_LTGOLD1] );
 
 	y += b->height;
@@ -897,7 +918,10 @@
 	x += b->width / 2;
 	y += 4;
 
-	UI_DrawProportionalString( x, y, s_startserver.maplongname[n], UI_CENTER|UI_SMALLFONT, colorTable[color] );
+	// TS 3.3.2002
+	//UI_DrawProportionalString( x, y, s_startserver.maplongname[n], UI_CENTER|UI_SMALLFONT, colorTable[color] );
+	UI_DrawProportionalString( x, y-4, s_startserver.maplist[n], UI_CENTER|UI_SMALLFONT, colorTable[CT_DKGREY] );
+	UI_DrawProportionalString( x, y+12, s_startserver.maplongname[n], UI_CENTER|UI_TINYFONT, colorTable[color] );
 
 	x = b->generic.x;
 	y = b->generic.y;
@@ -1455,6 +1479,11 @@
 	qboolean			newBot;
 	int					newBotIndex;
 	char				newBotName[16];
+	
+	// TS 10.12.2001
+	menufield_s			motd;
+	menubitmap_s		motd_bg1;
+	menubitmap_s		motd_bg2;
 
 } serveroptions_t;
 
@@ -1574,6 +1603,7 @@
 =================
 */
 static void ServerOptions_Start( void ) {
+  
 	int		timelimit;
 	int		fraglimit;
 	int		maxclients,holdMaxClients;
@@ -1584,7 +1614,7 @@
 	int		skill;
 	int		n;
 	char	buf[64];
-
+  
 	timelimit	 = atoi( s_serveroptions.timelimit.field.buffer );
 	fraglimit	 = atoi( s_serveroptions.fraglimit.field.buffer );
 	flaglimit	 = atoi( s_serveroptions.flaglimit.field.buffer );
@@ -1636,6 +1666,9 @@
 		break;
 	}
 
+  // TS 10.12.2001
+	trap_Cvar_Set("g_motd", s_serveroptions.motd.field.buffer );
+
 	trap_Cvar_SetValue( "sv_maxclients", Com_Clamp( 0, 64, maxclients ) );
 	trap_Cvar_SetValue( "dedicated", Com_Clamp( 0, 2, dedicated ) );
 	trap_Cvar_SetValue ("timelimit", Com_Clamp( 0, timelimit, timelimit ) );
@@ -1644,7 +1677,6 @@
 	trap_Cvar_SetValue( "g_friendlyfire", friendlyfire );
 	trap_Cvar_SetValue( "sv_pure", pure );
 	trap_Cvar_Set("sv_hostname", s_serveroptions.hostname.field.buffer );
-
 	// the wait commands will allow the dedicated to take effect
 	trap_Cmd_ExecuteText( EXEC_APPEND, va( "wait ; wait ; map %s\n", s_startserver.maplist[s_startserver.currentmap] ) );
 
@@ -2113,6 +2145,8 @@
 	Q_strncpyz( s_serveroptions.hostname.field.buffer, UI_Cvar_VariableString( "sv_hostname" ), sizeof( s_serveroptions.hostname.field.buffer ) );
 	s_serveroptions.pure.curvalue = Com_Clamp( 0, 1, trap_Cvar_VariableValue( "sv_pure" ) );
 
+	// TS 10.12.2001
+	Q_strncpyz( s_serveroptions.motd.field.buffer, UI_Cvar_VariableString( "g_motd" ), sizeof( s_serveroptions.motd.field.buffer ) );
 
 	// set the map pic
 	Com_sprintf( picname, 64, "levelshots/%s", s_startserver.maplist[s_startserver.currentmap] );
@@ -2453,19 +2487,24 @@
 		s_serveroptions.hostname.generic.type       = MTYPE_FIELD;
 		s_serveroptions.hostname.generic.flags      = QMF_SMALLFONT;
 		s_serveroptions.hostname.generic.x          = 180;
-		s_serveroptions.hostname.generic.y	        = 63;
-		s_serveroptions.hostname.field.widthInChars = 18;
+		s_serveroptions.hostname.generic.y	        = 60;
+		// TS 10.12.2001
+		// s_serveroptions.hostname.field.widthInChars = 18;
+		s_serveroptions.hostname.field.widthInChars = 22;
 		s_serveroptions.hostname.field.maxchars     = 64;
 		s_serveroptions.hostname.field.style		= UI_SMALLFONT;
 		s_serveroptions.hostname.field.titleEnum	= MBT_HOSTNAME;
-		s_serveroptions.hostname.field.titlecolor	= CT_BLACK;
+		// TS 10.12.2001
+		// s_serveroptions.hostname.field.titlecolor	= CT_BLACK;
+		s_serveroptions.hostname.field.titlecolor	= CT_WHITE;
+
 		s_serveroptions.hostname.field.textcolor	= CT_DKGOLD1;
 		s_serveroptions.hostname.field.textcolor2	= CT_LTGOLD1;
 
 		s_serveroptions.hostnamebackground1.generic.type			= MTYPE_BITMAP;      
 		s_serveroptions.hostnamebackground1.generic.flags		= QMF_INACTIVE;
 		s_serveroptions.hostnamebackground1.generic.x			= 80;
-		s_serveroptions.hostnamebackground1.generic.y			= 60;
+		s_serveroptions.hostnamebackground1.generic.y			= 57;
 		s_serveroptions.hostnamebackground1.generic.name			= GRAPHIC_SQUARE;
 		s_serveroptions.hostnamebackground1.width				= 265;
 		s_serveroptions.hostnamebackground1.height				= 22;
@@ -2475,13 +2514,47 @@
 		s_serveroptions.hostnamebackground2.generic.type		= MTYPE_BITMAP;      
 		s_serveroptions.hostnamebackground2.generic.flags		= QMF_INACTIVE;
 		s_serveroptions.hostnamebackground2.generic.x			= 180;
-		s_serveroptions.hostnamebackground2.generic.y			= 63;
+		s_serveroptions.hostnamebackground2.generic.y			= 60;
 		s_serveroptions.hostnamebackground2.generic.name		= GRAPHIC_SQUARE;
 		s_serveroptions.hostnamebackground2.width				= 153;
 		s_serveroptions.hostnamebackground2.height				= 17;
 		s_serveroptions.hostnamebackground2.color				= CT_BLACK;
 		s_serveroptions.hostnamebackground2.textEnum			= MBT_NONE;
 
+		// TS 10.12.2001 -->
+		s_serveroptions.motd.generic.type       = MTYPE_FIELD;
+		s_serveroptions.motd.generic.flags      = QMF_SMALLFONT;
+		s_serveroptions.motd.generic.x          = 180;
+		s_serveroptions.motd.generic.y	        = 79;
+		s_serveroptions.motd.field.widthInChars = 22;
+		s_serveroptions.motd.field.maxchars     = 64;
+		s_serveroptions.motd.field.style		= UI_SMALLFONT;
+		s_serveroptions.motd.field.titleEnum	= MBT_MOTD;
+		s_serveroptions.motd.field.titlecolor	= CT_WHITE;
+		s_serveroptions.motd.field.textcolor	= CT_DKGOLD1;
+		s_serveroptions.motd.field.textcolor2	= CT_LTGOLD1;
+
+		s_serveroptions.motd_bg1.generic.type			= MTYPE_BITMAP;      
+		s_serveroptions.motd_bg1.generic.flags		= QMF_INACTIVE;
+		s_serveroptions.motd_bg1.generic.x			= 80;
+		s_serveroptions.motd_bg1.generic.y			= 76;
+		s_serveroptions.motd_bg1.generic.name			= GRAPHIC_SQUARE;
+		s_serveroptions.motd_bg1.width				= 265;
+		s_serveroptions.motd_bg1.height				= 22;
+		s_serveroptions.motd_bg1.color				= CT_DKPURPLE1;
+		s_serveroptions.motd_bg1.textEnum				= MBT_NONE;
+
+		s_serveroptions.motd_bg2.generic.type		= MTYPE_BITMAP;      
+		s_serveroptions.motd_bg2.generic.flags		= QMF_INACTIVE;
+		s_serveroptions.motd_bg2.generic.x			= 180;
+		s_serveroptions.motd_bg2.generic.y			= 79;
+		s_serveroptions.motd_bg2.generic.name		= GRAPHIC_SQUARE;
+		s_serveroptions.motd_bg2.width				= 153;
+		s_serveroptions.motd_bg2.height				= 17;
+		s_serveroptions.motd_bg2.color				= CT_BLACK;
+		s_serveroptions.motd_bg2.textEnum			= MBT_NONE;
+		// TS 10.12.2001 <--
+
 	}
 
 	y = 123;
@@ -2687,9 +2760,13 @@
 
 	if ( s_serveroptions.multiplayer ) 
 	{
-		Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.hostnamebackground1 );
-		Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.hostnamebackground2 );
+		// Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.hostnamebackground1 );
+		// Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.hostnamebackground2 );
 		Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.hostname );
+
+		// Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.motd_bg1 );
+		// Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.motd_bg2 );
+		Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.motd );
 	}
 
 	Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.mainmenu );
@@ -4019,6 +4096,7 @@
 	s_advancedserver.runspeed.field.textcolor2				= CT_LTGOLD1;
 
 	y += pad;
+	/*
 	s_advancedserver.gravity.generic.type					= MTYPE_FIELD;
 	s_advancedserver.gravity.generic.flags					= QMF_NUMBERSONLY|QMF_SMALLFONT;
 	s_advancedserver.gravity.generic.x						= x;
@@ -4033,6 +4111,7 @@
 	s_advancedserver.gravity.field.titlecolor				= CT_LTGOLD1;
 	s_advancedserver.gravity.field.textcolor				= CT_DKGOLD1;
 	s_advancedserver.gravity.field.textcolor2				= CT_LTGOLD1;
+	*/
 
 	y += pad;
 	s_advancedserver.knockback.generic.type					= MTYPE_FIELD;
@@ -4389,7 +4468,10 @@
 
 	Menu_AddItem( &s_advancedserver.menu, &s_advancedserver.classchangetimeout);
 	Menu_AddItem( &s_advancedserver.menu, &s_advancedserver.nojointimeout);
-//	Menu_AddItem( &s_advancedserver.menu, &s_advancedserver.gravity );
+  
+  // TS 12.12.2001
+  // Menu_AddItem( &s_advancedserver.menu, &s_advancedserver.gravity );
+  
 	Menu_AddItem( &s_advancedserver.menu, &s_advancedserver.knockback );
 	Menu_AddItem( &s_advancedserver.menu, &s_advancedserver.dmgmult );
 	if (!fromMenu)
@@ -4437,7 +4519,9 @@
 	Com_sprintf( s_advancedserver.repawntime.field.buffer, 3, "%i", (int)Com_Clamp( 1, 60, trap_Cvar_VariableValue( "g_weaponrespawn" ) ) );
 	Com_sprintf( s_advancedserver.maxclients.field.buffer, 3, "%i", (int)Com_Clamp( 0, 64, trap_Cvar_VariableValue( "sv_maxclients" ) ) );
 	Com_sprintf( s_advancedserver.runspeed.field.buffer, 5, "%i", (int)Com_Clamp( 150, 1000, trap_Cvar_VariableValue( "g_speed" ) ) );
+
 	Com_sprintf( s_advancedserver.gravity.field.buffer, 5, "%i", (int)Com_Clamp( 0, 5000, trap_Cvar_VariableValue( "g_gravity" ) ) );
+
 	Com_sprintf( s_advancedserver.knockback.field.buffer, 6, "%i", (int)Com_Clamp( 0, 10000, trap_Cvar_VariableValue( "g_knockback" ) ) );
 	Com_sprintf( s_advancedserver.dmgmult.field.buffer, 12, "%f", (float)Com_Clamp( 0.0, 100.0, trap_Cvar_VariableValue( "g_dmgmult" ) ) );
 	Com_sprintf( s_advancedserver.bot_minplayers.field.buffer, 3, "%i", (int)Com_Clamp( 0, 64, trap_Cvar_VariableValue( "bot_minplayers" ) ) );
Index: Code-DM/ui/ui_removebots.c
===================================================================
--- Code-DM/ui/ui_removebots.c	(revision 1)
+++ Code-DM/ui/ui_removebots.c	(revision 42)
@@ -16,12 +16,6 @@
 #define ID_DOWN				12
 #define ID_DELETE			13
 #define ID_BOTNAME0			20
-#define ID_BOTNAME1			21
-#define ID_BOTNAME2			22
-#define ID_BOTNAME3			23
-#define ID_BOTNAME4			24
-#define ID_BOTNAME5			25
-#define ID_BOTNAME6			26
 
 #define BOTS_VIEWABLE		11
 
@@ -39,7 +33,7 @@
 	int				numBots;
 	int				baseBotNum;
 	int				selectedBotNum;
-	char			botnames[BOTS_VIEWABLE][32];
+	char			botnames[BOTS_VIEWABLE][MAX_NAME_LENGTH];
 	int				botClientNums[MAX_BOTS];
 } removeBotsMenuInfo_t;
 
Index: Code-DM/ui/ui_controls2.c
===================================================================
--- Code-DM/ui/ui_controls2.c	(revision 1)
+++ Code-DM/ui/ui_controls2.c	(revision 42)
@@ -312,8 +312,9 @@
 #define ID_CHAT4		34
 #define ID_USEINVENTORY	35
 #define ID_OBJECTIVES	36
+#define ID_IGNORE	37
+#define ID_UNIGNORE	38
 
-
 #define ID_USE			1	
 
 
@@ -403,6 +404,8 @@
 	menuaction_s		chat2;
 	menuaction_s		chat3;
 	menuaction_s		chat4;
+	menuaction_s		ignore;
+	menuaction_s		unignore;
 	menulist_s			joyenable;
 	menuslider_s		joythreshold;
 	int					section;
@@ -462,6 +465,8 @@
 	{"messagemode4", 	MNT_SHORTCUT_CHATATTACKER,	ID_CHAT4,		ANIM_CHAT,		-1,				-1,		-1, -1,MNT_SHORTCUT_KEY},
 	{"+button2",		MNT_SHORTCUT_USEINVENTORY,	ID_USEINVENTORY,ANIM_IDLE,		K_SPACE,		-1,		-1, -1,MNT_SHORTCUT_KEY},
 	{"+analysis",		MNT_SHORTCUT_OBJECTIVES,	ID_OBJECTIVES,	ANIM_IDLE,		-1,				-1,		-1, -1,MNT_SHORTCUT_KEY},
+	{"ignore",		MNT_SHORTCUT_IGNORE,			ID_IGNORE,		ANIM_IDLE,		-1,			-1,		-1, -1,MNT_SHORTCUT_KEY},
+	{"unignore",		MNT_SHORTCUT_UNIGNORE,			ID_UNIGNORE,		ANIM_IDLE,		-1,			-1,		-1, -1,MNT_SHORTCUT_KEY},
 	{(char*)NULL,		0,							0,				0,				-1,				-1,		-1,	-1,0},
 };
 
@@ -523,6 +528,8 @@
 	&s_controls.chat3,
 	&s_controls.chat4,
 	&s_controls.gesture,
+	&s_controls.ignore,
+	&s_controls.unignore,
 	NULL,
 };
 
@@ -605,6 +612,8 @@
 	(menucommon_s *)&s_controls.chat3,
 	(menucommon_s *)&s_controls.chat4,
 	(menucommon_s *)&s_controls.gesture,
+	(menucommon_s *)&s_controls.ignore,
+	(menucommon_s *)&s_controls.unignore,
 	(menucommon_s *)&s_controls.showscores,
 	NULL,
 };
@@ -3753,9 +3762,21 @@
 	s_controls.gesture.generic.type			= MTYPE_ACTION;
 	s_controls.gesture.generic.flags		= QMF_LEFT_JUSTIFY|QMF_HIGHLIGHT_IF_FOCUS;
 	s_controls.gesture.generic.callback		= Controls_ActionEvent;
-	s_controls.gesture.generic.ownerdraw	= Controls_DrawKeyBinding;
+	s_controls.gesture.generic.ownerdraw		= Controls_DrawKeyBinding;
 	s_controls.gesture.generic.id 			= ID_GESTURE;
 
+	s_controls.ignore.generic.type			= MTYPE_ACTION;
+	s_controls.ignore.generic.flags		= QMF_LEFT_JUSTIFY|QMF_HIGHLIGHT_IF_FOCUS;
+	s_controls.ignore.generic.callback		= Controls_ActionEvent;
+	s_controls.ignore.generic.ownerdraw		= Controls_DrawKeyBinding;
+	s_controls.ignore.generic.id 			= ID_IGNORE;
+
+	s_controls.unignore.generic.type		= MTYPE_ACTION;
+	s_controls.unignore.generic.flags		= QMF_LEFT_JUSTIFY|QMF_HIGHLIGHT_IF_FOCUS;
+	s_controls.unignore.generic.callback		= Controls_ActionEvent;
+	s_controls.unignore.generic.ownerdraw		= Controls_DrawKeyBinding;
+	s_controls.unignore.generic.id 			= ID_UNIGNORE;
+
 	s_attack_waiting_action.generic.type			= MTYPE_ACTION;
 	s_attack_waiting_action.generic.flags			= QMF_HIDDEN;
 	s_attack_waiting_action.generic.x				= 202;
@@ -3781,6 +3802,8 @@
 	Menu_AddItem( &s_controlscommand_menu, ( void * )&s_controls.chat3);
 	Menu_AddItem( &s_controlscommand_menu, ( void * )&s_controls.chat4);
 	Menu_AddItem( &s_controlscommand_menu, ( void * )&s_controls.gesture);
+	Menu_AddItem( &s_controlscommand_menu, ( void * )&s_controls.ignore);
+	Menu_AddItem( &s_controlscommand_menu, ( void * )&s_controls.unignore);
 	Menu_AddItem( &s_controlscommand_menu, ( void * )&s_attack_waiting_action);
 
 	// initialize the configurable cvars
Index: Code-DM/ui/ui_gameinfo.c
===================================================================
--- Code-DM/ui/ui_gameinfo.c	(revision 1)
+++ Code-DM/ui/ui_gameinfo.c	(revision 42)
@@ -149,7 +149,7 @@
 	int			numdirs;
 	vmCvar_t	arenasFile;
 	char		filename[128];
-	char		dirlist[1024];
+	char		dirlist[10240];
 	char*		dirptr;
 	int			i, n;
 	int			dirlen;
@@ -168,7 +168,7 @@
 	}
 
 	// get all arenas from .arena files
-	numdirs = trap_FS_GetFileList("scripts", ".arena", dirlist, 1024 );
+	numdirs = trap_FS_GetFileList("scripts", ".arena", dirlist, 10240 );
 	dirptr  = dirlist;
 	for (i = 0; i < numdirs; i++, dirptr += dirlen+1) {
 		dirlen = strlen(dirptr);
Index: Code-DM/ui/ui_spreset.c
===================================================================
--- Code-DM/ui/ui_spreset.c	(revision 1)
+++ Code-DM/ui/ui_spreset.c	(revision 42)
@@ -121,9 +121,9 @@
 
 	Reset_Cache();
 
-	n1 = UI_ProportionalStringWidth( "YES/NO" );
-	n2 = UI_ProportionalStringWidth( "YES" ) + PROP_GAP_WIDTH;
-	n3 = UI_ProportionalStringWidth( "/" )  + PROP_GAP_WIDTH;
+	n1 = UI_ProportionalStringWidth( "YES/NO", UI_BIGFONT);
+	n2 = UI_ProportionalStringWidth( "YES", UI_BIGFONT) + PROP_GAP_WIDTH;
+	n3 = UI_ProportionalStringWidth( "/", UI_BIGFONT)  + PROP_GAP_WIDTH;
 	l1 = 320 - ( n1 / 2 );
 	l2 = l1 + n2;
 	l3 = l2 + n3;
Index: Code-DM/ui/ui_sound.c
===================================================================
--- Code-DM/ui/ui_sound.c	(revision 1)
+++ Code-DM/ui/ui_sound.c	(revision 42)
@@ -11,11 +11,14 @@
 #define ID_QUALITY			16
 #define ID_A3D				17
 #define ID_RATE				18
+#define ID_ALDEVICE			19
 
 static int s_sndquality_Names[] =
 {
 	MNT_LOW,
 	MNT_HIGH,
+	MNT_SOUND_OPENAL,
+	MNT_OFF,
 	MNT_NONE
 };
 
@@ -44,6 +47,7 @@
 	menuslider_s		musicvolume;
 	menulist_s			quality;
 	menulist_s			a3d;
+	menulist_s			aldevice;
 
 	menubitmap_s		back;
 	int					holdSoundQuality;
@@ -52,22 +56,89 @@
 
 static soundOptionsInfo_t	soundOptionsInfo;
 
-static void SoundQualityAction( qboolean result ) 
+char aldevices[1024];
+#define MAX_ALDEVICES 64
+const char *aldevicelist[MAX_ALDEVICES];
+int aldevnum;
+
+static void GetAlDevices()
 {
-	if ( result ) 
+	char *devptr = aldevices;
+	int curdev = 0;
+	
+	trap_Cvar_VariableStringBuffer("s_alAvailableDevices", aldevices, sizeof(aldevices));
+
+	if(!*devptr)
 	{
-		soundOptionsInfo.holdSoundQuality = soundOptionsInfo.quality.curvalue; 
-		if( soundOptionsInfo.quality.curvalue ) 
+		aldevnum = 0;
+		return;
+	}
+
+	aldevicelist[curdev] = devptr;
+
+	while(*devptr)
+	{
+		if(*devptr == '\n')
 		{
-			trap_Cvar_SetValue( "s_khz", 22 );
-//			trap_Cvar_SetValue( "s_compression", 0 );
+			*devptr = '\0';
+			devptr++;
+			if(*devptr)
+				aldevicelist[++curdev] = devptr;
 		}
-		else 
+		else
+			devptr++;
+	}
+
+	aldevnum = curdev + 1;
+}
+
+static int GetCurAlDeviceNum()
+{
+	int curdev;
+	char curdevname[128];
+
+	trap_Cvar_VariableStringBuffer("s_alDevice", curdevname, sizeof(curdevname));
+
+	for(curdev = 0; curdev < aldevnum; curdev++)
+	{
+		if(!strcmp(curdevname, soundOptionsInfo.aldevice.itemnames[curdev]))
+			return curdev;
+	}
+
+	return 0;
+}
+
+static void SoundQualityAction(qboolean result)
+{
+	if (result)
+	{
+		if(soundOptionsInfo.holdSoundQuality == 1)
 		{
-			trap_Cvar_SetValue( "s_khz", 11 );
-//			trap_Cvar_SetValue( "s_compression", 1 );
+			if(!(trap_Cvar_VariableValue("s_alSources") && UI_NoCompat()))
+			{
+				// OpenAL support does not exist.
+				soundOptionsInfo.quality.curvalue = 2;
+				SoundQualityAction(qtrue);
+				return;
+			}
+			trap_Cvar_SetValue("s_useOpenAL", 1);
+			trap_Cvar_SetValue("s_initsound", 1);
 		}
-		//UI_ForceMenuOff();
+		else if(soundOptionsInfo.holdSoundQuality == 0)
+		{
+			trap_Cvar_SetValue("s_khz", 22);
+			trap_Cvar_SetValue("s_useOpenAL", 0);
+			trap_Cvar_SetValue("s_initsound", 1);
+		}
+		else if(soundOptionsInfo.holdSoundQuality == 3)
+		{
+			trap_Cvar_SetValue("s_khz", 11);
+			trap_Cvar_SetValue("s_useOpenAL", 0);
+			trap_Cvar_SetValue("s_initsound", 1);
+		}
+		else
+			trap_Cvar_SetValue("s_initsound", 0);
+
 		trap_Cmd_ExecuteText( EXEC_APPEND, "snd_restart\n" );
 	}
 	else
@@ -145,6 +216,11 @@
 		soundOptionsInfo.a3d.curvalue = holdCurvalue;
 
 		break;
+	case ID_ALDEVICE:
+		trap_Cvar_Set("s_alDevice",
+						  soundOptionsInfo.aldevice.itemnames[soundOptionsInfo.aldevice.curvalue]);
+		trap_Cmd_ExecuteText( EXEC_APPEND, "snd_restart\n" );
+		break;
 	}
 }
 
@@ -184,7 +260,33 @@
 	UI_DrawHandlePic(112,303,  500, 4, uis.whiteShader);		// Middle long line
 	UI_DrawHandlePic( 88, 300, 64, 8, soundOptionsInfo.corner);	// Corner graphic
 
+
 	trap_R_SetColor( colorTable[CT_DKBROWN1]);
+	UI_DrawHandlePic(295, 342,   8, 93, uis.whiteShader);		// Middle Bottom Left column
+	trap_R_SetColor( colorTable[CT_LTPURPLE1]);
+	UI_DrawHandlePic( 98, 359, 185, 64,soundOptionsInfo.grid); 
+	trap_R_SetColor( colorTable[CT_LTBLUE1]);
+	UI_DrawHandlePic( 98, 359, 185, 64, soundOptionsInfo.wave1); 
+	trap_R_SetColor( colorTable[CT_DKBROWN1]);
+	UI_DrawHandlePic(96,359,  4, 64, uis.whiteShader);		// Left side of frame
+	UI_DrawHandlePic(281,359,  4, 64, uis.whiteShader);		// Right side of frame
+	UI_DrawHandlePic(96,355,  189, 4, uis.whiteShader);		// Top of frame
+	UI_DrawHandlePic(96,423,  189, 4, uis.whiteShader);		// Bottom of frame
+
+
+	UI_DrawHandlePic(306, 342,  8, 93, uis.whiteShader);		// Middle Bottom Right column
+	trap_R_SetColor( colorTable[CT_LTPURPLE1]);
+	UI_DrawHandlePic(324, 359, 300, 64, soundOptionsInfo.grid); 
+	trap_R_SetColor( colorTable[CT_LTRED1]);
+	UI_DrawHandlePic(324, 359, 300, 64, soundOptionsInfo.wave2); 
+	trap_R_SetColor( colorTable[CT_DKBROWN1]);
+	UI_DrawHandlePic(324, 359,   4, 64, uis.whiteShader);		// Left side of frame
+	UI_DrawHandlePic(620, 359,   4, 64, uis.whiteShader);		// Right side of frame
+	UI_DrawHandlePic(324,355,  300, 4, uis.whiteShader);		// Top of frame
+	UI_DrawHandlePic(324,423,  300, 4, uis.whiteShader);		// Bottom of frame
+
+	/*
+	trap_R_SetColor( colorTable[CT_DKBROWN1]);
 	UI_DrawHandlePic(356,342,  8, 93, uis.whiteShader);		// Middle Bottom Left column
 	trap_R_SetColor( colorTable[CT_LTPURPLE1]);
 	UI_DrawHandlePic( 98, 359, 248, 64,soundOptionsInfo.grid); 
@@ -208,6 +310,8 @@
 	UI_DrawHandlePic(392,355,  220, 4, uis.whiteShader);		// Top of frame
 	UI_DrawHandlePic(392,423,  220, 4, uis.whiteShader);		// Bottom of frame
 
+	*/
+
 	UI_Setup_MenuButtons();
 
 	UI_DrawProportionalString(  74,  66, "29876",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
@@ -265,7 +369,8 @@
 {
 	int x,y;
 	int	rate;
-
+	char sbackend[256];
+	qboolean withopenal, withsound = trap_Cvar_VariableValue("s_initsound");
 	UI_SoundMenu_Cache();
 
 	soundOptionsInfo.menu.nitems					= 0;
@@ -365,7 +470,7 @@
 
 	soundOptionsInfo.quality.generic.type			= MTYPE_SPINCONTROL;
 	soundOptionsInfo.quality.generic.flags			= QMF_HIGHLIGHT_IF_FOCUS;
-	soundOptionsInfo.quality.generic.x				= 120;
+	soundOptionsInfo.quality.generic.x				= 90;
 	soundOptionsInfo.quality.generic.y				= 322;
 	soundOptionsInfo.quality.generic.callback		= UI_SoundOptionsMenu_Event;
 	soundOptionsInfo.quality.generic.id				= ID_QUALITY;
@@ -378,38 +483,97 @@
 	soundOptionsInfo.quality.textY					= 2;
 	soundOptionsInfo.quality.listnames				= s_sndquality_Names;
 
-	soundOptionsInfo.a3d.generic.type				= MTYPE_SPINCONTROL;
-	soundOptionsInfo.a3d.generic.flags				= QMF_HIGHLIGHT_IF_FOCUS;
-	soundOptionsInfo.a3d.generic.x					= 416;
-	soundOptionsInfo.a3d.generic.y					= 322;
-	soundOptionsInfo.a3d.generic.callback			= UI_SoundOptionsMenu_Event;
-	soundOptionsInfo.a3d.generic.id					= ID_A3D;
-	soundOptionsInfo.a3d.textEnum					= MBT_A3D;
-	soundOptionsInfo.a3d.textcolor					= CT_BLACK;
-	soundOptionsInfo.a3d.textcolor2					= CT_WHITE;
-	soundOptionsInfo.a3d.color						= CT_DKPURPLE1;
-	soundOptionsInfo.a3d.color2						= CT_LTPURPLE1;
-	soundOptionsInfo.a3d.textX						= 5;
-	soundOptionsInfo.a3d.textY						= 2;
-	soundOptionsInfo.a3d.listnames					= s_OffOnNone_Names;
+	if(withsound)
+	{
+		trap_Cvar_VariableStringBuffer("s_backend", sbackend, sizeof(sbackend));
+		withopenal = !Q_stricmp(sbackend, "OpenAL");
 
-	SetupMenu_TopButtons(&soundOptionsInfo.menu,MENU_SOUND,NULL);
+		if(withopenal)
+		{
+			GetAlDevices();
+			
+			if(aldevnum)
+			{
+				soundOptionsInfo.aldevice.generic.type				= MTYPE_SPINCONTROL;
+				soundOptionsInfo.aldevice.generic.flags				= QMF_HIGHLIGHT_IF_FOCUS;
+				soundOptionsInfo.aldevice.generic.x					= 320;
+				soundOptionsInfo.aldevice.generic.y					= 322;
+				soundOptionsInfo.aldevice.generic.callback			= UI_SoundOptionsMenu_Event;
+				soundOptionsInfo.aldevice.generic.id					= ID_ALDEVICE;
+				soundOptionsInfo.aldevice.textEnum					= MBT_ALDEVICE;
+				soundOptionsInfo.aldevice.textcolor					= CT_BLACK;
+				soundOptionsInfo.aldevice.textcolor2					= CT_WHITE;
+				soundOptionsInfo.aldevice.color						= CT_DKPURPLE1;
+				soundOptionsInfo.aldevice.color2						= CT_LTPURPLE1;
+				soundOptionsInfo.aldevice.textX						= 5;
+				soundOptionsInfo.aldevice.textY						= 2;
+				soundOptionsInfo.aldevice.numitems					= aldevnum;
+				soundOptionsInfo.aldevice.itemnames					= aldevicelist;
+			}
+		}
+		else if(trap_Cvar_VariableValue("s_initsound"))
+		{
+			soundOptionsInfo.a3d.generic.type				= MTYPE_SPINCONTROL;
+			soundOptionsInfo.a3d.generic.flags				= QMF_HIGHLIGHT_IF_FOCUS;
+			soundOptionsInfo.a3d.generic.x					= 320;
+			soundOptionsInfo.a3d.generic.y					= 322;
+			soundOptionsInfo.a3d.generic.callback			= UI_SoundOptionsMenu_Event;
+			soundOptionsInfo.a3d.generic.id					= ID_A3D;
+			soundOptionsInfo.a3d.textEnum					= MBT_A3D;
+			soundOptionsInfo.a3d.textcolor					= CT_BLACK;
+			soundOptionsInfo.a3d.textcolor2					= CT_WHITE;
+			soundOptionsInfo.a3d.color						= CT_DKPURPLE1;
+			soundOptionsInfo.a3d.color2						= CT_LTPURPLE1;
+			soundOptionsInfo.a3d.textX						= 5;
+			soundOptionsInfo.a3d.textY						= 2;
+			soundOptionsInfo.a3d.listnames					= s_OffOnNone_Names;
+		}
+	}
 
+	SetupMenu_TopButtons(&soundOptionsInfo.menu, MENU_SOUND, NULL);
+
 	Menu_AddItem( &soundOptionsInfo.menu, ( void * )&soundOptionsInfo.rate );
 	Menu_AddItem( &soundOptionsInfo.menu, ( void * )&soundOptionsInfo.sfxvolume);
 	Menu_AddItem( &soundOptionsInfo.menu, ( void * )&soundOptionsInfo.musicvolume);
 	Menu_AddItem( &soundOptionsInfo.menu, ( void * )&soundOptionsInfo.quality);
-	Menu_AddItem( &soundOptionsInfo.menu, ( void * )&soundOptionsInfo.a3d);
 
+	if(withsound)
+	{
+		if(withopenal)
+		{
+			if(aldevnum)
+			{
+				Menu_AddItem( &soundOptionsInfo.menu, ( void * )&soundOptionsInfo.aldevice);
+				soundOptionsInfo.aldevice.curvalue = GetCurAlDeviceNum();
+			}
+		}
+		else
+		{
+			Menu_AddItem( &soundOptionsInfo.menu, ( void * )&soundOptionsInfo.a3d);
+			soundOptionsInfo.a3d.curvalue = (int)trap_Cvar_VariableValue("s_usingA3D");
+		}
+	}
+
 	soundOptionsInfo.sfxvolume.curvalue = trap_Cvar_VariableValue( "s_volume" ) * 10;
 	soundOptionsInfo.musicvolume.curvalue = trap_Cvar_VariableValue( "s_musicvolume" ) * 10;
-	soundOptionsInfo.quality.curvalue = trap_Cvar_VariableValue( "s_khz" ) != 11;
+	if(!trap_Cvar_VariableValue("s_initsound"))
+		soundOptionsInfo.quality.curvalue = 3;
+	else
+	{
+		if(trap_Cvar_VariableValue("s_useOpenAL"))
+			soundOptionsInfo.quality.curvalue = 2;
+		else
+		{
+			if(trap_Cvar_VariableValue("s_khz") > 11)
+				soundOptionsInfo.quality.curvalue = 1;
+			else
+				soundOptionsInfo.quality.curvalue = 0;
+		}
+	}
 	soundOptionsInfo.holdSoundQuality = soundOptionsInfo.quality.curvalue; 
-	soundOptionsInfo.a3d.curvalue = (int)trap_Cvar_VariableValue( "s_usingA3D" );
-
+	
 	soundOptionsInfo.menu.initialized = qtrue;
 
-
 	rate = trap_Cvar_VariableValue( "rate" );
 	if( rate <= 2500 ) 
 	{
Index: Code-DM/ui/ui_confirm.c
===================================================================
--- Code-DM/ui/ui_confirm.c	(revision 1)
+++ Code-DM/ui/ui_confirm.c	(revision 42)
@@ -157,6 +157,10 @@
 static const char* TranslateQuestion(const char *question) {
 	static char translatedQuestion[128];
 
+	// ignore a leading whitespace character as it appears in server messages.
+	if(*question == ' ')
+		question++;
+
 	if (!strcmp(question, "Unpure client detected. Invalid .PK3 files referenced!")) {
 		return menu_normal_text[MNT_UNPURECLIENT];
 	}
@@ -165,7 +169,7 @@
 		return menu_normal_text[MNT_CANNOTVALIDATE];
 	}
 
-	if (!strcmp(question, "kicked")) {
+	if (!strcmp(question, "kicked") || !strcmp(question, "was kicked")) {
 		return menu_normal_text[MNT_KICKED];
 	}
 
Index: Code-DM/ui/ui_local.h
===================================================================
--- Code-DM/ui/ui_local.h	(revision 1)
+++ Code-DM/ui/ui_local.h	(revision 42)
@@ -128,6 +128,7 @@
 
 	// Sound Menu
 	MNT_SOUND_SETUP,
+	MNT_SOUND_OPENAL,
 
 	// Game Options
 	MNT_CROSSHAIR_NONE,
@@ -308,6 +309,8 @@
 	MNT_SHORTCUT_CHATTEAM,
 	MNT_SHORTCUT_CHATTARGET,
 	MNT_SHORTCUT_CHATATTACKER,
+	MNT_SHORTCUT_IGNORE,
+	MNT_SHORTCUT_UNIGNORE,
 
 	MNT_DEFAULT_WARNING1,
 	MNT_DEFAULT_WARNING2,
@@ -350,6 +353,11 @@
 	MNT_TEAM_ORDERS_TITLE,
 	MNT_TEAM_ORDERS,
 
+	MNT_IGNORES_TITLE,
+	MNT_IGNORES,
+	MNT_IGNORES_PLAYERLIST,
+
+	MNT_ORDER_TOEVERYONE,
 	MNT_ORDER_IMLEADER,
 	MNT_ORDER_DEFEND,
 	MNT_ORDER_FOLLOW,
@@ -553,6 +561,7 @@
 	MNT_ADV_STATUS2_CLASSCHANGETIMEOUT,
 	MNT_ACTIONHERO,
 	MNT_VIP,
+	
 	MNT_MAX
 } menuNormalTextType_t;
 
@@ -618,6 +627,7 @@
 	MBT_VOICEVOLUME,
 	MBT_SOUNDQUALITY,
 	MBT_A3D,
+	MBT_ALDEVICE,
 
 	MBT_WAITFORKEY,
 	MBT_WEAPONKEYS,
@@ -700,6 +710,7 @@
 	MBT_INGAMEADDSIMULANTS,
 	MBT_INGAMEREMOVESIMULANTS,
 	MBT_INGAMETEAMORDERS,
+	MBT_INGAMEIGNORES,
 	MBT_INGAMESETUP,
 	MBT_INGAMESERVERDATA,
 	MBT_INGAMERESTART,
@@ -792,6 +803,9 @@
 	MBT_SKILL,
 
 	MBT_REMOVE_HOLO,
+	MBT_ADD_IGNORE,
+	MBT_REMOVE_IGNORE,
+	MBT_FLUSH_IGNORE,
 
 	MBT_ARROW_UP,
 	MBT_ARROW_DOWN,
@@ -898,6 +912,10 @@
 	MBT_AUTOTEAM,
 	MBT_NOJOINTIMEOUT,
 	MBT_CLASSCHANGE,
+	
+	// TS 10.12.2001
+	MBT_MOTD,
+	
 	MBT_MAX
 } menuButtonTextType_t;
 
@@ -1328,6 +1346,13 @@
 extern char	*ui_medalSounds[];
 
 //
+// ui_main.c
+//
+extern void UI_RegisterCvars( void );
+extern void UI_UpdateCvars( void );
+extern qboolean UI_NoCompat(void);
+
+//
 // ui_mfield.c
 //
 extern void			MField_Clear( mfield_t *edit );
@@ -1343,8 +1368,6 @@
 //
 extern void MainMenu_Cache( void );
 extern void UI_MainMenu(void);
-extern void UI_RegisterCvars( void );
-extern void UI_UpdateCvars( void );
 extern void UI_Setup_MenuButtons(void);
 extern void UI_QuitMenu( void );
 extern void UI_ChooseServerTypeMenu( void ); 
@@ -1470,6 +1493,10 @@
 extern void ArenaServers_Cache( void );
 extern void UI_ChooseServerTypeMenu_Cache( void );
 
+// TS 10.12.2001
+extern void UI_LoadServerList();
+extern void UI_SaveServerList();
+
 //
 // ui_startserver.c
 //
@@ -1658,6 +1685,7 @@
 extern void			UI_PrecacheMenuGraphics(menugraphics_s *menuGraphics,int maxI);
 extern void			UI_MenuFrame(menuframework_s *menu);
 extern void			UI_MenuFrame2(menuframework_s *menu);
+extern void			UI_LanguageFilename(char *baseName, char *baseExtension, char *finalName);
 
 extern qboolean		m_entersound;
 extern uiStatic_t	uis;
@@ -1770,6 +1798,12 @@
 extern void UI_TeamOrdersMenu_Cache( void );
 
 //
+// ui_ignores.c
+//
+void UI_Ignores_Cache(void);
+void UI_IgnoresMenu(void);
+
+//
 // ui_display.c
 //
 //void UI_DisplayOptionsMenu_Cache( void );
Index: Code-DM/ui/Makefile
===================================================================
--- Code-DM/ui/Makefile	(revision 0)
+++ Code-DM/ui/Makefile	(revision 42)
@@ -0,0 +1,126 @@
+default: qvm
+qvm: build_qvm
+so: build_so
+
+# bins for building VMs (you need all q3lcc, q3rcc, q3cpp and q3asm in the same dir.)
+Q3LCC = ../../bin/q3lcc
+Q3ASM = ../../bin/q3asm
+
+# compiler to use for building shared objects
+CC = gcc
+
+# cflags for the VM compiler
+VMCFLAGS = $(CFLAGS) -DQ3_VM
+# cflags for the compiler
+SOCFLAGS = $(CFLAGS) -g3 -ggdb3 -fPIC
+
+ARCH=$(shell uname -m | sed -e s/i.86/i386/)
+
+OBJ = \
+  ui_main.o \
+  ui_addbots.o \
+  ui_atoms.o \
+  ui_cdkey.o \
+  ui_confirm.o \
+  ui_connect.o \
+  ui_controls2.o \
+  ui_cvars.o \
+  ui_demo2.o \
+  ui_fonts.o \
+  ui_gameinfo.o \
+  ui_ingame.o \
+  ui_menu.o \
+  ui_mfield.o \
+  ui_mods.o \
+  ui_network.o \
+  ui_playermodel.o \
+  ui_players.o \
+  ui_playersettings.o \
+  ui_preferences.o \
+  ui_qmenu.o \
+  ui_removebots.o \
+  ui_serverinfo.o \
+  ui_servers2.o \
+  ui_sound.o \
+  ui_sparena.o \
+  ui_specifyserver.o \
+  ui_splevel.o \
+  ui_sppostgame.o \
+  ui_spreset.o \
+  ui_spskill.o \
+  ui_startserver.o \
+  ui_team.o \
+  ui_teamorders.o \
+  ui_ignores.o \
+  ui_video.o \
+
+
+OBJDEP = \
+  ../game/q_shared.o \
+  ../game/q_math.o \
+  ../game/bg_misc.o \
+  
+SOOBJ = \
+  ui_syscalls.o \
+
+QVMOBJ = \
+  ../game/bg_lib.o \
+
+DO_VMCC = $(Q3LCC) $(VMCFLAGS) -o $@ -c $<
+DO_SOCC = $(CC) $(SOCFLAGS) -o $@ -c $<
+
+build_qvm: DO_CC=$(DO_VMCC)
+build_so: DO_CC=$(DO_SOCC)
+
+cg_consolecmds.o : cg_consolecmds.c; $(DO_CC)
+
+ui_addbots.o : ui_addbots.c; $(DO_CC)
+ui_atoms.o : ui_atoms.c; $(DO_CC)
+ui_cdkey.o : ui_cdkey.c; $(DO_CC)
+ui_confirm.o : ui_confirm.c; $(DO_CC)
+ui_connect.o : ui_connect.c; $(DO_CC)
+ui_controls2.o : ui_controls2.c; $(DO_CC)
+ui_cvars.o : ui_cvars.c; $(DO_CC)
+ui_demo2.o : ui_demo2.c; $(DO_CC)
+ui_fonts.o : ui_fonts.c; $(DO_CC)
+ui_gameinfo.o : ui_gameinfo.c; $(DO_CC)
+ui_ingame.o : ui_ingame.c; $(DO_CC)
+ui_main.o : ui_main.c; $(DO_CC)
+ui_menu.o : ui_menu.c; $(DO_CC)
+ui_mfield.o : ui_mfield.c; $(DO_CC)
+ui_mods.o : ui_mods.c; $(DO_CC)
+ui_network.o : ui_network.c; $(DO_CC)
+ui_playermodel.o : ui_playermodel.c; $(DO_CC)
+ui_players.o : ui_players.c; $(DO_CC)
+ui_playersettings.o : ui_playersettings.c; $(DO_CC)
+ui_preferences.o : ui_preferences.c; $(DO_CC)
+ui_qmenu.o : ui_qmenu.c; $(DO_CC)
+ui_removebots.o : ui_removebots.c; $(DO_CC)
+ui_serverinfo.o : ui_serverinfo.c; $(DO_CC)
+ui_servers2.o : ui_servers2.c; $(DO_CC)
+ui_sound.o : ui_sound.c; $(DO_CC)
+ui_sparena.o : ui_sparena.c; $(DO_CC)
+ui_specifyserver.o : ui_specifyserver.c; $(DO_CC)
+ui_splevel.o : ui_splevel.c; $(DO_CC)
+ui_sppostgame.o : ui_sppostgame.c; $(DO_CC)
+ui_spreset.o : ui_spreset.c; $(DO_CC)
+ui_spskill.o : ui_spskill.c; $(DO_CC)
+ui_startserver.o : ui_startserver.c; $(DO_CC)
+ui_team.o : ui_team.c; $(DO_CC)
+ui_teamorders.o : ui_teamorders.c; $(DO_CC)
+ui_ignores.o : ui_ignores.c; $(DO_CC)
+ui_video.o : ui_video.c; $(DO_CC)
+
+ui_syscalls.o : ui_syscalls.c; $(DO_CC)
+
+
+build_qvm: $(OBJ) $(QVMOBJ)
+	$(Q3ASM) -vq3 -o ui.qvm $(OBJ) $(OBJDEP) $(QVMOBJ) ui_syscalls.asm
+	cp *.qvm ../../baseef/vm/
+
+build_so: $(OBJ) $(SOOBJ)
+	$(CC) -shared -Wl,--export-dynamic,-soname,ui$(ARCH).so -o ui$(ARCH).so $(OBJ) $(OBJDEP) $(SOOBJ)
+	cp *.so ../../baseef/
+
+clean:
+	rm -f *.o *.qvm *.so
Index: Code-DM/ui/ui_teamorders.c
===================================================================
--- Code-DM/ui/ui_teamorders.c	(revision 1)
+++ Code-DM/ui/ui_teamorders.c	(revision 42)
@@ -335,7 +335,7 @@
 
 	trap_GetClientState( &cs );
 
-	Q_strncpyz( teamOrdersMenuInfo.botNames[0], "Everyone", 16 );
+	Q_strncpyz( teamOrdersMenuInfo.botNames[0], menu_normal_text[MNT_ORDER_TOEVERYONE], 16 );
 	teamOrdersMenuInfo.numBots = 1;
 
 	trap_GetConfigString( CS_SERVERINFO, info, sizeof(info) );
Index: Code-DM/ui/ui_ignores.c
===================================================================
--- Code-DM/ui/ui_ignores.c	(revision 0)
+++ Code-DM/ui/ui_ignores.c	(revision 42)
@@ -0,0 +1,596 @@
+// Copyright (C) 1999-2000 Id Software, Inc.
+//
+/*
+=======================================================================
+
+REMOVE BOTS MENU
+
+=======================================================================
+*/
+
+
+#include "ui_local.h"
+
+#define ID_UP				11
+#define ID_DOWN				12
+#define ID_PLUP				13
+#define ID_PLDOWN			14
+#define ID_ADD				15
+#define ID_DELETE			16
+#define ID_FLUSH			17
+#define ID_BACK				18
+#define ID_IGNORENAME			20
+#define ID_PLAYERNAME			40
+
+#define IGNORES_VIEWABLE		11
+#define IGNORES_VIEWABLE_MAXLENGTH	28
+#define PLAYERS_VIEWABLE		IGNORES_VIEWABLE
+#define PLAYERS_VIEWABLE_MAXLENGTH	IGNORES_VIEWABLE_MAXLENGTH
+
+#define BUTTONS_Y_POS			250
+
+typedef struct
+{
+	menuframework_s	menu;
+
+	menubitmap_s	up;
+	menubitmap_s	down;
+
+	menubitmap_s	plup;
+	menubitmap_s	pldown;
+
+	menutext_s		ignores[IGNORES_VIEWABLE];
+	menutext_s		players[PLAYERS_VIEWABLE];
+
+	menubitmap_s	add;
+	menubitmap_s	delete;
+	menubitmap_s	flush;
+	menubitmap_s	back;
+
+	int				numIgnores;
+	int				baseIgnoreNum;
+	int				selectedIgnoreNum;
+
+	int				numPlayers;
+	int				basePlayerNum;
+	int				selectedPlayerNum;
+
+	char			ignorenames[IGNORES_VIEWABLE][MAX_NAME_LENGTH];
+	char			ignorenames_viewable[IGNORES_VIEWABLE][IGNORES_VIEWABLE_MAXLENGTH];
+	char			playernames[PLAYERS_VIEWABLE][MAX_NAME_LENGTH];
+	char			playernames_viewable[PLAYERS_VIEWABLE][PLAYERS_VIEWABLE_MAXLENGTH];
+} ignoresMenuInfo_t;
+
+static ignoresMenuInfo_t	ignoresMenuInfo;
+
+
+/*
+=================
+UI_IgnoresMenu_SetIgnoreNames
+=================
+*/
+static void UI_IgnoresMenu_SetIgnoreNames(void)
+{
+	char	ignores[MAX_IGNORE_LENGTH];
+	char	curignore[MAX_NAME_LENGTH] = "";
+	int index, ignindex, cignindex, entrynum = 0;
+	qboolean entrystarted = qfalse;
+
+	trap_Cvar_VariableStringBuffer(IGNORE_CVARNAME, ignores, sizeof(ignores));
+
+	for(cignindex = ignindex = index = 0; ignores[index]; cignindex++, index++)
+	{
+		if(!ignores[index] || ignores[index] == IGNORE_SEP)
+		{
+			curignore[cignindex] = '\0';
+			
+			if(entrystarted)
+			{
+				entrynum++;
+				entrystarted = qfalse;
+
+				if(entrynum > ignoresMenuInfo.baseIgnoreNum && ignindex < IGNORES_VIEWABLE)
+				{
+					Q_strncpyz(ignoresMenuInfo.ignorenames[ignindex],
+						   curignore, sizeof(ignoresMenuInfo.ignorenames[0]));
+					Q_strncpyz(ignoresMenuInfo.ignorenames_viewable[ignindex],
+						   curignore, sizeof(ignoresMenuInfo.ignorenames_viewable[0]));
+					ignindex++;
+				}
+			}
+			else
+				continue;
+		}
+		else
+		{
+			if(!entrystarted)
+			{
+				entrystarted = qtrue;
+				cignindex = 0;
+			}
+			
+			curignore[cignindex] = ignores[index];
+		}
+	}
+
+	ignoresMenuInfo.numIgnores = entrynum;
+
+	for(; ignindex < IGNORES_VIEWABLE; ignindex++)
+	{
+		ignoresMenuInfo.ignorenames[ignindex][0] = '\0';
+		ignoresMenuInfo.ignorenames_viewable[ignindex][0] = '\0';
+	}
+}
+
+/*
+=================
+UI_IgnoresMenu_SetPlayerNames
+=================
+*/
+static void UI_IgnoresMenu_SetPlayerNames(void)
+{
+	char info[MAX_INFO_STRING], *curplayer;
+	int index, numPlayers, viewindex = 0;
+	
+	trap_GetConfigString(CS_SERVERINFO, info, sizeof(info));
+	numPlayers = atoi(Info_ValueForKey(info, "sv_maxclients"));
+	
+	ignoresMenuInfo.numPlayers = 0;
+
+	for(index = 0; index < numPlayers; index++)
+	{
+		trap_GetConfigString(CS_PLAYERS + index, info, sizeof(info));
+
+		if(*(curplayer = Info_ValueForKey(info, "n")))
+		{
+			// Player is valid.
+			ignoresMenuInfo.numPlayers++;
+			if(ignoresMenuInfo.numPlayers > ignoresMenuInfo.basePlayerNum && viewindex < PLAYERS_VIEWABLE)
+			{
+				Q_strncpyz(ignoresMenuInfo.playernames[viewindex],
+					   curplayer, sizeof(ignoresMenuInfo.playernames[0]));
+				Q_strncpyz(ignoresMenuInfo.playernames_viewable[viewindex],
+					   curplayer, sizeof(ignoresMenuInfo.playernames_viewable[0]));
+				viewindex++;
+			}
+		}
+	}
+	
+	for(; viewindex < PLAYERS_VIEWABLE; viewindex++)
+	{
+		ignoresMenuInfo.playernames[viewindex][0] = '\0';
+		ignoresMenuInfo.playernames_viewable[viewindex][0] = '\0';
+	}
+}
+
+/*
+=================
+UI_IgnoresMenu_AddEvent
+=================
+*/
+static void UI_IgnoresMenu_AddEvent(void* ptr, int event)
+{
+	if (event != QM_ACTIVATED)
+		return;
+
+	if(!*ignoresMenuInfo.playernames[ignoresMenuInfo.selectedPlayerNum])
+		return;
+		
+	trap_Cmd_ExecuteText(EXEC_NOW, va("ignore \"%s\"\n", ignoresMenuInfo.playernames[ignoresMenuInfo.selectedPlayerNum]));
+
+	// Redraw menu with updated info.
+	UI_IgnoresMenu_SetIgnoreNames();
+	UI_IgnoresMenu_SetPlayerNames();
+}
+
+/*
+=================
+UI_IgnoresMenu_DeleteEvent
+=================
+*/
+static void UI_IgnoresMenu_DeleteEvent(void* ptr, int event)
+{
+	if (event != QM_ACTIVATED)
+		return;
+
+	if(!*ignoresMenuInfo.ignorenames[ignoresMenuInfo.selectedIgnoreNum])
+		return;
+		
+	trap_Cmd_ExecuteText(EXEC_NOW, va("unignore \"%s\"\n", ignoresMenuInfo.ignorenames[ignoresMenuInfo.selectedIgnoreNum]));
+
+	// Redraw menu with updated info.
+	UI_IgnoresMenu_SetIgnoreNames();
+	UI_IgnoresMenu_SetPlayerNames();
+}
+
+/*
+=================
+UI_IgnoresMenu_DeleteEvent
+=================
+*/
+static void UI_IgnoresMenu_FlushEvent(void* ptr, int event)
+{
+	if (event != QM_ACTIVATED)
+		return;
+
+	trap_Cmd_ExecuteText(EXEC_NOW, "unignoreall\n");
+
+	// Redraw menu with updated info.
+	UI_IgnoresMenu_SetIgnoreNames();
+	UI_IgnoresMenu_SetPlayerNames();
+}
+
+/*
+=================
+UI_IgnoresMenu_IgnoreEvent
+=================
+*/
+static void UI_IgnoresMenu_IgnoreEvent(void* ptr, int event)
+{
+	int newid;
+	
+	if (event != QM_ACTIVATED)
+		return;
+
+	newid = ((menucommon_s*)ptr)->id - ID_IGNORENAME;
+	if(!*ignoresMenuInfo.ignorenames[newid])
+		return;
+
+	ignoresMenuInfo.ignores[ignoresMenuInfo.selectedIgnoreNum].color = colorTable[CT_DKGOLD1];
+	ignoresMenuInfo.selectedIgnoreNum = newid;
+	ignoresMenuInfo.ignores[ignoresMenuInfo.selectedIgnoreNum].color = colorTable[CT_YELLOW];
+}
+
+/*
+=================
+UI_IgnoresMenu_PlayerEvent
+=================
+*/
+static void UI_IgnoresMenu_PlayerEvent(void* ptr, int event)
+{
+	int newid;
+
+	if (event != QM_ACTIVATED)
+		return;
+
+	newid = ((menucommon_s*)ptr)->id - ID_PLAYERNAME;
+	if(!*ignoresMenuInfo.playernames[newid])
+		return;
+
+	ignoresMenuInfo.players[ignoresMenuInfo.selectedPlayerNum].color = colorTable[CT_DKGOLD1];
+	ignoresMenuInfo.selectedPlayerNum = newid;
+	ignoresMenuInfo.players[ignoresMenuInfo.selectedPlayerNum].color = colorTable[CT_YELLOW];
+}
+
+/*
+=================
+UI_IgnoresMenu_BackEvent
+=================
+*/
+static void UI_IgnoresMenu_BackEvent(void* ptr, int event)
+{
+	if (event != QM_ACTIVATED)
+		return;
+
+	UI_PopMenu();
+}
+
+
+/*
+=================
+UI_IgnoresMenu_UpEvent
+=================
+*/
+static void UI_IgnoresMenu_UpEvent(void* ptr, int event)
+{
+	if (event != QM_ACTIVATED)
+		return;
+
+	if(ignoresMenuInfo.baseIgnoreNum > 0)
+	{
+		ignoresMenuInfo.baseIgnoreNum--;
+		UI_IgnoresMenu_SetIgnoreNames();
+	}
+}
+
+
+/*
+=================
+UI_IgnoresMenu_DownEvent
+=================
+*/
+static void UI_IgnoresMenu_DownEvent(void* ptr, int event)
+{
+	if (event != QM_ACTIVATED)
+		return;
+
+	if(ignoresMenuInfo.baseIgnoreNum + IGNORES_VIEWABLE < ignoresMenuInfo.numIgnores)
+	{
+		ignoresMenuInfo.baseIgnoreNum++;
+		UI_IgnoresMenu_SetIgnoreNames();
+	}
+}
+
+/*
+=================
+UI_IgnoresMenu_PlUpEvent
+=================
+*/
+static void UI_IgnoresMenu_PlUpEvent(void* ptr, int event)
+{
+	if (event != QM_ACTIVATED)
+		return;
+
+	if(ignoresMenuInfo.basePlayerNum > 0)
+	{
+		ignoresMenuInfo.basePlayerNum--;
+		UI_IgnoresMenu_SetPlayerNames();
+	}
+}
+
+
+/*
+=================
+UI_IgnoresMenu_PlDownEvent
+=================
+*/
+static void UI_IgnoresMenu_PlDownEvent(void* ptr, int event)
+{
+	if (event != QM_ACTIVATED)
+		return;
+
+	if(ignoresMenuInfo.basePlayerNum + IGNORES_VIEWABLE < ignoresMenuInfo.numPlayers)
+	{
+		ignoresMenuInfo.basePlayerNum++;
+		UI_IgnoresMenu_SetPlayerNames();
+	}
+}
+
+/*
+=================
+UI_RemoveMenu_Draw
+=================
+*/
+static void UI_IgnoresMenu_Draw(void)
+{
+	UI_MenuFrame(&ignoresMenuInfo.menu);
+
+	trap_R_SetColor( colorTable[CT_DKPURPLE2]);
+	UI_DrawHandlePic(30,201,  47, 90, uis.whiteShader);	//Left side of frame
+	UI_DrawHandlePic(30,293,  47, 97, uis.whiteShader);
+
+	// Playerlist frame
+	trap_R_SetColor( colorTable[CT_DKBLUE1]);
+	UI_DrawHandlePic( 81, 172,  225,  18, uis.whiteShader);	// Top
+	UI_DrawHandlePic(288, 189,   18, 246, uis.whiteShader);	// Side
+	UI_DrawProportionalString( 90, 173, menu_normal_text[MNT_IGNORES_PLAYERLIST],UI_SMALLFONT,colorTable[CT_BLACK]); // Top
+
+	// Ignores frame
+	trap_R_SetColor( colorTable[CT_DKBLUE1]);
+	UI_DrawHandlePic(404, 172,  225,  18, uis.whiteShader);
+	UI_DrawHandlePic(404, 189,   18, 246, uis.whiteShader);
+	UI_DrawProportionalString(425, 173, menu_normal_text[MNT_IGNORES],UI_SMALLFONT,colorTable[CT_BLACK]);
+
+
+	// standard menu drawing
+	Menu_Draw( &ignoresMenuInfo.menu );
+}
+
+/*
+=================
+UI_Ignores_Cache
+=================
+*/
+void UI_Ignores_Cache( void ) 
+{
+	trap_R_RegisterShaderNoMip( "menu/common/arrow_up_16.tga" );
+	trap_R_RegisterShaderNoMip( "menu/common/arrow_dn_16.tga" );
+}
+
+
+/*
+=================
+UI_IgnoresMenu_Init
+=================
+*/
+static void UI_IgnoresMenu_Init( void ) {
+	int		n;
+	int		y;
+
+	memset( &ignoresMenuInfo, 0 ,sizeof(ignoresMenuInfo) );
+	ignoresMenuInfo.menu.draw					= UI_IgnoresMenu_Draw;
+	ignoresMenuInfo.menu.fullscreen				= qtrue;
+	ignoresMenuInfo.menu.wrapAround				= qtrue;
+	ignoresMenuInfo.menu.descX					= MENU_DESC_X;
+	ignoresMenuInfo.menu.descY					= MENU_DESC_Y;
+	ignoresMenuInfo.menu.titleX					= MENU_TITLE_X;
+	ignoresMenuInfo.menu.titleY					= MENU_TITLE_Y;
+	ignoresMenuInfo.menu.titleI					= MNT_IGNORES_TITLE;
+	ignoresMenuInfo.menu.footNoteEnum			= MNT_IGNORES;
+
+	UI_Ignores_Cache();
+
+	UI_IgnoresMenu_SetIgnoreNames();
+	UI_IgnoresMenu_SetPlayerNames();
+
+	ignoresMenuInfo.up.generic.type					= MTYPE_BITMAP;
+	ignoresMenuInfo.up.generic.flags					= QMF_HIGHLIGHT_IF_FOCUS;
+	ignoresMenuInfo.up.generic.x						= 405;
+	ignoresMenuInfo.up.generic.y						= 196;
+	ignoresMenuInfo.up.generic.id					= ID_UP;
+	ignoresMenuInfo.up.generic.callback				= UI_IgnoresMenu_UpEvent;
+	ignoresMenuInfo.up.width  						= 16;
+	ignoresMenuInfo.up.height  						= 16;
+	ignoresMenuInfo.up.color  						= CT_DKGOLD1;
+	ignoresMenuInfo.up.color2  						= CT_LTGOLD1;
+	ignoresMenuInfo.up.generic.name					= "menu/common/arrow_up_16.tga";
+
+	ignoresMenuInfo.down.generic.type				= MTYPE_BITMAP;
+	ignoresMenuInfo.down.generic.flags				= QMF_HIGHLIGHT_IF_FOCUS;
+	ignoresMenuInfo.down.generic.x					= 405;
+	ignoresMenuInfo.down.generic.y					= 407;
+	ignoresMenuInfo.down.generic.id					= ID_DOWN;
+	ignoresMenuInfo.down.generic.callback				= UI_IgnoresMenu_DownEvent;
+	ignoresMenuInfo.down.width  						= 16;
+	ignoresMenuInfo.down.height  					= 16;
+	ignoresMenuInfo.down.color  						= CT_DKGOLD1;
+	ignoresMenuInfo.down.color2  					= CT_LTGOLD1;
+	ignoresMenuInfo.down.generic.name				= "menu/common/arrow_dn_16.tga";
+
+	ignoresMenuInfo.plup.generic.type					= MTYPE_BITMAP;
+	ignoresMenuInfo.plup.generic.flags					= QMF_HIGHLIGHT_IF_FOCUS;
+	ignoresMenuInfo.plup.generic.x						= 289;
+	ignoresMenuInfo.plup.generic.y						= 196;
+	ignoresMenuInfo.plup.generic.id					= ID_PLUP;
+	ignoresMenuInfo.plup.generic.callback				= UI_IgnoresMenu_PlUpEvent;
+	ignoresMenuInfo.plup.width  						= 16;
+	ignoresMenuInfo.plup.height  						= 16;
+	ignoresMenuInfo.plup.color  						= CT_DKGOLD1;
+	ignoresMenuInfo.plup.color2  						= CT_LTGOLD1;
+	ignoresMenuInfo.plup.generic.name					= "menu/common/arrow_up_16.tga";
+
+	ignoresMenuInfo.pldown.generic.type				= MTYPE_BITMAP;
+	ignoresMenuInfo.pldown.generic.flags				= QMF_HIGHLIGHT_IF_FOCUS;
+	ignoresMenuInfo.pldown.generic.x					= 289;
+	ignoresMenuInfo.pldown.generic.y					= 407;
+	ignoresMenuInfo.pldown.generic.id					= ID_PLDOWN;
+	ignoresMenuInfo.pldown.generic.callback				= UI_IgnoresMenu_PlDownEvent;
+	ignoresMenuInfo.pldown.width  						= 16;
+	ignoresMenuInfo.pldown.height  					= 16;
+	ignoresMenuInfo.pldown.color  						= CT_DKGOLD1;
+	ignoresMenuInfo.pldown.color2  					= CT_LTGOLD1;
+	ignoresMenuInfo.pldown.generic.name				= "menu/common/arrow_dn_16.tga";
+
+	for( n = 0, y = 194; n < PLAYERS_VIEWABLE; n++, y += 20 ) 
+	{
+		ignoresMenuInfo.players[n].generic.type			= MTYPE_PTEXT;
+		ignoresMenuInfo.players[n].generic.flags		= QMF_HIGHLIGHT_IF_FOCUS;
+		ignoresMenuInfo.players[n].generic.id			= ID_PLAYERNAME + n;
+		ignoresMenuInfo.players[n].generic.x			= 84;
+		ignoresMenuInfo.players[n].generic.y			= y;
+		ignoresMenuInfo.players[n].generic.callback		= UI_IgnoresMenu_PlayerEvent;
+		ignoresMenuInfo.players[n].string				= ignoresMenuInfo.playernames_viewable[n];
+		ignoresMenuInfo.players[n].color				= colorTable[CT_DKGOLD1];
+		ignoresMenuInfo.players[n].color2				= colorTable[CT_LTGOLD1];
+		ignoresMenuInfo.players[n].style				= UI_LEFT|UI_SMALLFONT;
+	}
+
+	for( n = 0, y = 194; n < IGNORES_VIEWABLE; n++, y += 20 ) 
+	{
+		ignoresMenuInfo.ignores[n].generic.type			= MTYPE_PTEXT;
+		ignoresMenuInfo.ignores[n].generic.flags		= QMF_HIGHLIGHT_IF_FOCUS;
+		ignoresMenuInfo.ignores[n].generic.id			= ID_IGNORENAME + n;
+		ignoresMenuInfo.ignores[n].generic.x			= 426;
+		ignoresMenuInfo.ignores[n].generic.y			= y;
+		ignoresMenuInfo.ignores[n].generic.callback		= UI_IgnoresMenu_IgnoreEvent;
+		ignoresMenuInfo.ignores[n].string				= ignoresMenuInfo.ignorenames_viewable[n];
+		ignoresMenuInfo.ignores[n].color				= colorTable[CT_DKGOLD1];
+		ignoresMenuInfo.ignores[n].color2				= colorTable[CT_LTGOLD1];
+		ignoresMenuInfo.ignores[n].style				= UI_LEFT|UI_SMALLFONT;
+	}
+
+	ignoresMenuInfo.add.generic.type			= MTYPE_BITMAP;
+	ignoresMenuInfo.add.generic.name			= GRAPHIC_SQUARE;
+	ignoresMenuInfo.add.generic.flags			= QMF_HIGHLIGHT_IF_FOCUS;
+	ignoresMenuInfo.add.generic.id				= ID_ADD;
+	ignoresMenuInfo.add.generic.callback			= UI_IgnoresMenu_AddEvent;
+	ignoresMenuInfo.add.generic.x				= 310;
+	ignoresMenuInfo.add.generic.y				= BUTTONS_Y_POS;
+	ignoresMenuInfo.add.width  				= 90;
+	ignoresMenuInfo.add.height  				= MENU_BUTTON_MED_HEIGHT * 2;
+	ignoresMenuInfo.add.color				= CT_DKPURPLE1;
+	ignoresMenuInfo.add.color2				= CT_LTPURPLE1;
+	ignoresMenuInfo.add.textX				= MENU_BUTTON_TEXT_X;
+	ignoresMenuInfo.add.textY				= MENU_BUTTON_TEXT_Y + MENU_BUTTON_MED_HEIGHT/2;
+	ignoresMenuInfo.add.textEnum				= MBT_ADD_IGNORE;
+	ignoresMenuInfo.add.textcolor				= CT_BLACK;
+	ignoresMenuInfo.add.textcolor2				= CT_WHITE;
+
+	ignoresMenuInfo.delete.generic.type			= MTYPE_BITMAP;
+	ignoresMenuInfo.delete.generic.name			= GRAPHIC_SQUARE;
+	ignoresMenuInfo.delete.generic.flags			= QMF_HIGHLIGHT_IF_FOCUS;
+	ignoresMenuInfo.delete.generic.id			= ID_DELETE;
+	ignoresMenuInfo.delete.generic.callback			= UI_IgnoresMenu_DeleteEvent;
+	ignoresMenuInfo.delete.generic.x			= 310;
+	ignoresMenuInfo.delete.generic.y			= BUTTONS_Y_POS + 5 + MENU_BUTTON_MED_HEIGHT*2;
+	ignoresMenuInfo.delete.width  				= 90;
+	ignoresMenuInfo.delete.height  				= MENU_BUTTON_MED_HEIGHT * 2;
+	ignoresMenuInfo.delete.color				= CT_DKPURPLE1;
+	ignoresMenuInfo.delete.color2				= CT_LTPURPLE1;
+	ignoresMenuInfo.delete.textX				= MENU_BUTTON_TEXT_X;
+	ignoresMenuInfo.delete.textY				= MENU_BUTTON_TEXT_Y + MENU_BUTTON_MED_HEIGHT/2;
+	ignoresMenuInfo.delete.textEnum				= MBT_REMOVE_IGNORE;
+	ignoresMenuInfo.delete.textcolor			= CT_BLACK;
+	ignoresMenuInfo.delete.textcolor2			= CT_WHITE;
+
+	ignoresMenuInfo.flush.generic.type			= MTYPE_BITMAP;
+	ignoresMenuInfo.flush.generic.name			= GRAPHIC_SQUARE;
+	ignoresMenuInfo.flush.generic.flags			= QMF_HIGHLIGHT_IF_FOCUS;
+	ignoresMenuInfo.flush.generic.id			= ID_FLUSH;
+	ignoresMenuInfo.flush.generic.callback			= UI_IgnoresMenu_FlushEvent;
+	ignoresMenuInfo.flush.generic.x				= 310;
+	ignoresMenuInfo.flush.generic.y				= BUTTONS_Y_POS + 10 + MENU_BUTTON_MED_HEIGHT*4;
+	ignoresMenuInfo.flush.width  				= 90;
+	ignoresMenuInfo.flush.height  				= MENU_BUTTON_MED_HEIGHT * 2;
+	ignoresMenuInfo.flush.color				= CT_DKPURPLE1;
+	ignoresMenuInfo.flush.color2				= CT_LTPURPLE1;
+	ignoresMenuInfo.flush.textX				= MENU_BUTTON_TEXT_X;
+	ignoresMenuInfo.flush.textY				= MENU_BUTTON_TEXT_Y + MENU_BUTTON_MED_HEIGHT/2;
+	ignoresMenuInfo.flush.textEnum				= MBT_FLUSH_IGNORE;
+	ignoresMenuInfo.flush.textcolor				= CT_BLACK;
+	ignoresMenuInfo.flush.textcolor2			= CT_WHITE;
+
+	ignoresMenuInfo.back.generic.type			= MTYPE_BITMAP;
+	ignoresMenuInfo.back.generic.name			= BUTTON_GRAPHIC_LONGRIGHT;
+	ignoresMenuInfo.back.generic.flags			= QMF_HIGHLIGHT_IF_FOCUS;
+	ignoresMenuInfo.back.generic.id				= ID_BACK;
+	ignoresMenuInfo.back.generic.callback		= UI_IgnoresMenu_BackEvent;
+	ignoresMenuInfo.back.generic.x				= 482;
+	ignoresMenuInfo.back.generic.y				= 136;
+	ignoresMenuInfo.back.width  					= MENU_BUTTON_MED_WIDTH;
+	ignoresMenuInfo.back.height  				= MENU_BUTTON_MED_HEIGHT;
+	ignoresMenuInfo.back.color					= CT_DKPURPLE1;
+	ignoresMenuInfo.back.color2					= CT_LTPURPLE1;
+	ignoresMenuInfo.back.textX					= MENU_BUTTON_TEXT_X;
+	ignoresMenuInfo.back.textY					= MENU_BUTTON_TEXT_Y;
+	ignoresMenuInfo.back.textEnum				= MBT_INGAMEMENU;
+	ignoresMenuInfo.back.textcolor				= CT_BLACK;
+	ignoresMenuInfo.back.textcolor2				= CT_WHITE;
+
+
+	Menu_AddItem(&ignoresMenuInfo.menu, &ignoresMenuInfo.up);
+	Menu_AddItem(&ignoresMenuInfo.menu, &ignoresMenuInfo.down);
+
+	Menu_AddItem(&ignoresMenuInfo.menu, &ignoresMenuInfo.plup);
+	Menu_AddItem(&ignoresMenuInfo.menu, &ignoresMenuInfo.pldown);
+
+	for(n = 0; n < IGNORES_VIEWABLE; n++)
+		Menu_AddItem(&ignoresMenuInfo.menu, &ignoresMenuInfo.ignores[n]);
+	for(n = 0; n < PLAYERS_VIEWABLE; n++)
+		Menu_AddItem(&ignoresMenuInfo.menu, &ignoresMenuInfo.players[n]);
+
+	Menu_AddItem(&ignoresMenuInfo.menu, &ignoresMenuInfo.add);
+	Menu_AddItem(&ignoresMenuInfo.menu, &ignoresMenuInfo.delete);
+	Menu_AddItem(&ignoresMenuInfo.menu, &ignoresMenuInfo.flush);
+	Menu_AddItem(&ignoresMenuInfo.menu, &ignoresMenuInfo.back);
+
+	ignoresMenuInfo.baseIgnoreNum = 0;
+	ignoresMenuInfo.selectedIgnoreNum = 0;
+	ignoresMenuInfo.ignores[0].color = color_white;
+
+	ignoresMenuInfo.basePlayerNum = 0;
+	ignoresMenuInfo.selectedPlayerNum = 0;
+	ignoresMenuInfo.players[0].color = color_white;
+}
+
+
+/*
+=================
+UI_IgnoresMenu
+=================
+*/
+void UI_IgnoresMenu(void)
+{
+	UI_IgnoresMenu_Init();
+	UI_PushMenu( &ignoresMenuInfo.menu );
+}
Index: Code-DM/ui/ui_demo2.c
===================================================================
--- Code-DM/ui/ui_demo2.c	(revision 1)
+++ Code-DM/ui/ui_demo2.c	(revision 42)
@@ -11,13 +11,19 @@
 
 #include "ui_local.h"
 
+// Number of demos in the list
+#define MAX_DEMODISP 12
+#define SCROLL_SPEED MAX_DEMODISP
+#define MAX_DEMONAMELEN 48
 
-#define MAX_DEMOS			128
-#define NAMEBUFSIZE			( MAX_DEMOS * 16 )
+#define MAX_DEMOS			1024
+#define NAMEBUFSIZE			( MAX_DEMOS * 32 )
 
 #define ID_MAINMENU				10
 #define ID_ENGAGE				11
 #define ID_LIST					12
+#define ID_UP					13
+#define ID_DOWN					14
 
 #define ID_DEMOCOMMENT1			110
 #define ID_DEMOCOMMENT2			111
@@ -34,6 +40,9 @@
 
 #define PIC_UNDERLINE			"menu/common/underline.tga"
 
+#define PIC_UPARROW				"menu/common/arrow_up_16.tga"
+#define PIC_DNARROW				"menu/common/arrow_dn_16.tga"
+
 typedef struct 
 {
 	menuframework_s	menu;
@@ -41,6 +50,8 @@
 	menubitmap_s	main;
 	menubitmap_s	engage;
 	menulist_s		list;
+	menubitmap_s	upArrow;
+	menubitmap_s	downArrow;
 
 	qhandle_t		currentGameTopLeft;		// Upper left corner of current game box
 	qhandle_t		currentGameBotLeft;		// Bottom left corner of current game box
@@ -52,9 +63,14 @@
 
 	menubitmap_s	currentFile;
 
-	int				numDemos;
+	int			numDemos;
 	char			names[NAMEBUFSIZE];
+	int			numCompatDemos;
+	char			compatnames[NAMEBUFSIZE];
+
+	int numitems;
 	char			*demolist[MAX_DEMOS];
+	char			displaylist[MAX_DEMODISP][MAX_DEMONAMELEN];
 
 	int				currentDemoIndex;
 
@@ -76,8 +92,6 @@
 menufield_s	s_demoline11;
 menufield_s	s_demoline12;
 
-#define MAX_DEMODISP 12
-
 static void* g_demoline[] =
 {
 	&s_demoline1, 
@@ -95,7 +109,47 @@
 	NULL,
 };
 
+/*
+=================
+DemoMenu_PopulateList
+TiM: Fills the control
+list with values from the array,
+based off of an offset generated
+by the scroll buttons
+=================
+*/
+void DemoMenu_PopulateList ( int startingIndex ) {
+	int	i;
+	char*	demoName;
+	
+	for(i = 0; g_demoline[i]; i++)
+	{
+		if (i >= s_demos.numitems)
+			break;
 
+		demoName = s_demos.demolist[startingIndex+i];
+
+		//TiM - Error trapping. Although this should never happen
+		if ( !demoName ) {
+			((menubitmap_s *)g_demoline[i])->generic.flags	= QMF_INACTIVE|QMF_HIDDEN;
+			continue;
+		}
+
+		// No demos???
+		if (s_demos.numitems == 1)
+		{
+			if (!strcmp(demoName, menu_normal_text[MNT_NO_DEMOS_FOUND]))
+				((menubitmap_s *)g_demoline[i])->generic.flags	= QMF_INACTIVE;
+		}
+
+		COM_StripExtension(demoName, s_demos.displaylist[i], sizeof(s_demos.displaylist[i]));
+		Q_strupr(s_demos.displaylist[i]);
+
+		((menubitmap_s *)g_demoline[i])->textPtr = s_demos.displaylist[i];
+		((menubitmap_s *)g_demoline[i])->generic.flags	= QMF_HIGHLIGHT_IF_FOCUS;
+	}
+}
+
 /*
 =================
 DemoMenu_Graphics
@@ -124,10 +178,8 @@
 
 	// Current game box
 	trap_R_SetColor( colorTable[CT_DKPURPLE2]);
-	UI_DrawHandlePic(130,64,  88, 24, uis.whiteShader);	// Left Side of current game line box 3
-	UI_DrawHandlePic(218,64,  320, 3, uis.whiteShader);	// Top of current game line
-	UI_DrawHandlePic(218,85,  320, 3, uis.whiteShader);	// Bottom of current game line
-	UI_DrawHandlePic(516,64,  44, 24, uis.whiteShader);	// Right side of current game line
+	UI_DrawHandlePic(130,64,  430, 3, uis.whiteShader);	// Top of current game line
+	UI_DrawHandlePic(130,85,  430, 3, uis.whiteShader);	// Bottom of current game line
 
 	UI_DrawHandlePic(113, 64,  32,	32, s_demos.currentGameTopLeft);	// Upper left corner of current game box
 	UI_DrawHandlePic(113, 97,  32,	32, s_demos.currentGameBotLeft);	// Bottom left corner of current game box
@@ -149,9 +201,13 @@
 
 	UI_DrawHandlePic(205, 168,  277,  18, uis.whiteShader);			// Top bar
 	UI_DrawHandlePic(189, 193,  16,  224, uis.whiteShader);			// Left column
-	UI_DrawHandlePic(485, 193,  16,  224, uis.whiteShader);			// Right column
 	UI_DrawHandlePic(205, 424,  277,   8, uis.whiteShader);			// Bottom bar
 
+	//TiM - Arrow Boxes 
+	UI_DrawHandlePic(485, 193,  16,  16, uis.whiteShader);		// Up Arrow
+	UI_DrawHandlePic(485, 212,  16,  187, uis.whiteShader);		// Right column
+	UI_DrawHandlePic(485, 402,  16,  16, uis.whiteShader);		// Down Arrow
+
 	UI_DrawProportionalString(  124,  67, "67B",UI_TINYFONT, colorTable[CT_BLACK]);
 
 	UI_DrawProportionalString( 220, 169, menu_normal_text[MNT_CURRENTDEMOSAVAILABLE], UI_SMALLFONT, colorTable[CT_BLACK]);
@@ -188,6 +244,29 @@
 
 	switch( ((menucommon_s*)ptr)->id ) 
 	{
+		
+	case ID_UP:
+			s_demos.currentDemoIndex -= SCROLL_SPEED;
+
+			if ( s_demos.currentDemoIndex < 0 )
+				s_demos.currentDemoIndex = 0;
+
+			DemoMenu_PopulateList( s_demos.currentDemoIndex );
+			break;
+
+		case ID_DOWN:
+			s_demos.currentDemoIndex += SCROLL_SPEED;
+
+			//TiM - cap it when the final entry comes into view
+			if ( s_demos.numitems > MAX_DEMODISP 
+				 && ( s_demos.currentDemoIndex + MAX_DEMODISP ) > s_demos.numitems )
+			{
+				s_demos.currentDemoIndex = s_demos.numitems-MAX_DEMODISP;
+			}
+
+			DemoMenu_PopulateList( s_demos.currentDemoIndex );
+			break;
+
 		case ID_DEMOCOMMENT1:
 		case ID_DEMOCOMMENT2:
 		case ID_DEMOCOMMENT3:
@@ -200,11 +279,10 @@
 		case ID_DEMOCOMMENT10:
 		case ID_DEMOCOMMENT11:
 		case ID_DEMOCOMMENT12:
-			index = ((menucommon_s*)ptr)->id - ID_DEMOCOMMENT1;
-			if (((menubitmap_s *)g_demoline[index])->textPtr)
+			index = ((menucommon_s*)ptr)->id - ID_DEMOCOMMENT1 + s_demos.currentDemoIndex;
+			if ( s_demos.demolist[index] )
 			{
-				s_demos.currentDemoIndex = index;
-				s_demos.currentFile.textPtr = (((menubitmap_s *)g_demoline[index])->textPtr);
+				s_demos.currentFile.textPtr = s_demos.demolist[index];
 				//make it so
 				s_demos.engage.generic.flags	= QMF_HIGHLIGHT_IF_FOCUS;
 			}
@@ -213,7 +291,7 @@
 
 		case ID_ENGAGE:
 			UI_ForceMenuOff ();
-			trap_Cmd_ExecuteText( EXEC_APPEND, va( "demo %s.efdemo\n", s_demos.currentFile.textPtr) );
+			trap_Cmd_ExecuteText( EXEC_APPEND, va( "demo %s\n", s_demos.currentFile.textPtr) );
 			break;
 
 		case ID_MAINMENU:
@@ -247,9 +325,14 @@
 	s_demos.currentGameTopLeft = trap_R_RegisterShaderNoMip("menu/common/corner_ul_18_24.tga");
 	s_demos.currentGameBotLeft = trap_R_RegisterShaderNoMip("menu/common/corner_ll_18_18.tga");
 	s_demos.currentGameTopRight = trap_R_RegisterShaderNoMip("menu/common/corner_ur_18_24.tga");
+
 	s_demos.directoryUpperCorner1 = trap_R_RegisterShaderNoMip("menu/common/corner_ul_16_18.tga");
 	s_demos.directoryLowerCorner1 = trap_R_RegisterShaderNoMip("menu/common/corner_ll_8_16.tga");
 	s_demos.directoryUpperCorner2 = trap_R_RegisterShaderNoMip("menu/common/corner_ur_16_18.tga");
+
+	trap_R_RegisterShaderNoMip(PIC_UPARROW);
+	trap_R_RegisterShaderNoMip(PIC_DNARROW);
+
 	trap_R_RegisterShaderNoMip(PIC_UNDERLINE);
 
 }
@@ -265,6 +348,7 @@
 	int		i,x,y;
 	int		len;
 	char	*demoname;
+	char extension[16];
 
 	memset( &s_demos, 0 ,sizeof(demos_t) );
 	s_demos.menu.key = UI_DemosMenu_Key;
@@ -317,13 +401,13 @@
 
 	s_demos.currentFile.generic.type		= MTYPE_BITMAP;      
 	s_demos.currentFile.generic.flags		= QMF_INACTIVE;
-	s_demos.currentFile.generic.x			= 218;
+	s_demos.currentFile.generic.x			= 138;
 	s_demos.currentFile.generic.y			= 68;
 	s_demos.currentFile.generic.name		= BUTTON_GRAPHIC_LONGRIGHT;
 	s_demos.currentFile.generic.id			= ID_MAINMENU;
 	s_demos.currentFile.generic.callback	= Demos_MenuEvent;
-	s_demos.currentFile.width				= MENU_BUTTON_MED_WIDTH;
-	s_demos.currentFile.height				= MENU_BUTTON_MED_HEIGHT;
+	s_demos.currentFile.width				= 421;
+	s_demos.currentFile.height				= MENU_BUTTON_MED_HEIGHT-1;
 	s_demos.currentFile.color				= CT_BLACK;
 	s_demos.currentFile.color2				= CT_BLACK;
 	s_demos.currentFile.textX				= MENU_BUTTON_TEXT_X;
@@ -332,22 +416,46 @@
 	s_demos.currentFile.textPtr				= NULL;
 	s_demos.currentFile.textcolor			= CT_YELLOW;
 
-	s_demos.list.generic.type				= MTYPE_SCROLLLIST;
-	s_demos.list.generic.flags				= QMF_PULSEIFFOCUS;
-	s_demos.list.generic.callback			= Demos_MenuEvent;
-	s_demos.list.generic.id					= ID_LIST;
-	s_demos.list.generic.x					= 118;
-	s_demos.list.generic.y					= 170;
-	s_demos.list.width						= 16;
-	s_demos.list.height						= 14;
-	s_demos.list.numitems					= trap_FS_GetFileList( "demos", ".efdemo", s_demos.names, NAMEBUFSIZE );
-	s_demos.list.itemnames					= (const char **)s_demos.demolist;
-	s_demos.list.columns					= 3;
+	//TiM - Scroll Buttons
+	s_demos.upArrow.generic.type			= MTYPE_BITMAP;
+	s_demos.upArrow.generic.flags			= (QMF_INACTIVE|QMF_GRAYED); //Disabled by default
+	s_demos.upArrow.generic.x				= 486;
+	s_demos.upArrow.generic.y				= 195;
+	s_demos.upArrow.generic.name			= PIC_UPARROW;
+	s_demos.upArrow.generic.id				= ID_UP;
+	s_demos.upArrow.generic.callback		= Demos_MenuEvent;
+	s_demos.upArrow.width					= 14;
+	s_demos.upArrow.height					= 14;
+	s_demos.upArrow.color					= CT_DKGOLD1;
+	s_demos.upArrow.color2					= CT_LTGOLD1;
+	s_demos.upArrow.textcolor				= CT_BLACK;
+	s_demos.upArrow.textcolor2				= CT_WHITE;
 
+	s_demos.downArrow.generic.type			= MTYPE_BITMAP;
+	s_demos.downArrow.generic.flags			= (QMF_INACTIVE|QMF_GRAYED);
+	s_demos.downArrow.generic.x				= 486;
+	s_demos.downArrow.generic.y				= 404;
+	s_demos.downArrow.generic.name			= PIC_DNARROW;
+	s_demos.downArrow.generic.id			= ID_DOWN;
+	s_demos.downArrow.generic.callback		= Demos_MenuEvent;
+	s_demos.downArrow.width					= 14;
+	s_demos.downArrow.height				= 14;
+	s_demos.downArrow.color					= CT_DKGOLD1;
+	s_demos.downArrow.color2				= CT_LTGOLD1;
+	s_demos.downArrow.textcolor				= CT_BLACK;
+	s_demos.downArrow.textcolor2			= CT_WHITE;
+
+	if(UI_NoCompat())
+		s_demos.numDemos = trap_FS_GetFileList("demos", ".dm_25", s_demos.names, NAMEBUFSIZE);
+	else
+		s_demos.numDemos = 0;
+	
+	s_demos.numCompatDemos = trap_FS_GetFileList("demos", ".efdemo", s_demos.compatnames, NAMEBUFSIZE);
+	s_demos.numitems = s_demos.numDemos + s_demos.numCompatDemos;
+
 	x = 225;
 	y = 200;
-	i=0;
-	while (g_demoline[i])
+	for(i = 0; g_demoline[i]; i++)
 	{
 		((menubitmap_s *)g_demoline[i])->generic.type			= MTYPE_BITMAP;      
 		((menubitmap_s *)g_demoline[i])->generic.flags			= QMF_INACTIVE | QMF_HIDDEN;
@@ -370,61 +478,55 @@
 
 		Menu_AddItem( &s_demos.menu, ( void * )g_demoline[i]);
 		y += 18;
-		++i;
 	}
 
 	// No demos??
-	if (!s_demos.list.numitems) 
+	if (!s_demos.numitems) 
 	{
 		strcpy( s_demos.names, menu_normal_text[MNT_NO_DEMOS_FOUND] );
-		s_demos.list.numitems = 1;
+		s_demos.numitems = 1;
 	}
-	else if (s_demos.list.numitems > MAX_DEMOS)
+	else if (s_demos.numitems > MAX_DEMOS)
 	{// Too many demos???
-		s_demos.list.numitems = MAX_DEMOS;
+		s_demos.numitems = MAX_DEMOS;
 	}
 
+	//TiM - If the list is longer than we can fit, enable the scroll buttons
+	if ( s_demos.numitems > MAX_DEMODISP ) {
+		s_demos.upArrow.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;	
+		s_demos.downArrow.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;	
+	}
+
 	// Point fields to demo names
-	i=0;
 	demoname = s_demos.names;
-	while (g_demoline[i])
+
+	//TiM - instead of sending the list names directly to the controls, we'll populate an array
+	//with all of them, and then specify which ones to display afterwards.
+	for(i = 0; i < s_demos.numitems; i++)
 	{
-		if (i >= s_demos.list.numitems)
-		{
+		if(i == s_demos.numDemos)
+			demoname = s_demos.compatnames;
+
+		if ( !demoname )
 			break;
-		}
+		
+		//insert into the array
+		s_demos.demolist[i] = demoname;
 
-		((menubitmap_s *)g_demoline[i])->textPtr		= demoname;
-		((menubitmap_s *)g_demoline[i])->generic.flags	= QMF_HIGHLIGHT_IF_FOCUS;
+		//increment
+		for(; *demoname; demoname++);
+		
+		demoname++;
+	}
 
-		// No demos???
-		if (s_demos.list.numitems == 1)
-		{
-			if (!strcmp( demoname, menu_normal_text[MNT_NO_DEMOS_FOUND]))
-			{
-				((menubitmap_s *)g_demoline[i])->generic.flags	= QMF_INACTIVE;
-			}
-		}
+	//Populate the controls with the values from the array	
+	DemoMenu_PopulateList( s_demos.currentDemoIndex ); 
 
-		// strip extension
-		len = strlen( demoname );
-		if ( len>7 && !Q_stricmp(demoname +  len - 7,".efdemo"))
-		{
-			demoname[len-7] = '\0';
-		}
-
-		Q_strupr(demoname);
-
-		demoname += len + 1;
-
-		i++;
-	}
-
 	Menu_AddItem( &s_demos.menu, &s_demos.main );
-//	Menu_AddItem( &s_demos.menu, &s_demos.list );
 	Menu_AddItem( &s_demos.menu, &s_demos.engage );
 	Menu_AddItem( &s_demos.menu, &s_demos.currentFile );
-
+	Menu_AddItem( &s_demos.menu, &s_demos.upArrow );
+	Menu_AddItem( &s_demos.menu, &s_demos.downArrow );
 }
 
 
Index: Code-DM/ui/ui_players.c
===================================================================
--- Code-DM/ui/ui_players.c	(revision 1)
+++ Code-DM/ui/ui_players.c	(revision 42)
@@ -70,7 +70,7 @@
 	}
 
 	strcpy( path, item->world_model );
-	COM_StripExtension( path, path );
+	COM_StripExtension(path, path, sizeof(path));
 	strcat( path, "_flash.md3" );
 	pi->flashModel = trap_R_RegisterModel( path );
 
Index: Code-DM/ui/ui_syscalls.c
===================================================================
--- Code-DM/ui/ui_syscalls.c	(revision 1)
+++ Code-DM/ui/ui_syscalls.c	(revision 42)
@@ -5,9 +5,9 @@
 // this file is only included when building a dll
 // syscalls.asm is included instead when building a qvm
 
-static int (QDECL *syscall)( int arg, ... ) = (int (QDECL *)( int, ...))-1;
+static intptr_t (QDECL *syscall)( intptr_t arg, ... ) = (intptr_t (QDECL *)( intptr_t, ...))-1;
 
-void dllEntry( int (QDECL *syscallptr)( int arg,... ) ) {
+void dllEntry( intptr_t (QDECL *syscallptr)( intptr_t arg,... ) ) {
 	syscall = syscallptr;
 }
 
Index: Code-DM/ui/ui_ingame.c
===================================================================
--- Code-DM/ui/ui_ingame.c	(revision 1)
+++ Code-DM/ui/ui_ingame.c	(revision 42)
@@ -28,6 +28,7 @@
 #define ID_RESUME				18
 #define ID_TEAMORDERS			19
 #define ID_SCREENSHOT			20
+#define ID_IGNORES			21
 #define ID_INGAMEMENU			125
 #define ID_INGAME_QUIT_YES		131
 #define ID_INGAME_QUIT_NO		132
@@ -44,28 +45,13 @@
 	menubitmap_s	addbots;
 	menubitmap_s	removebots;
 	menubitmap_s	teamorders;
+	menubitmap_s	ignores;
 	menubitmap_s	screenshot;
 	menubitmap_s	resume;
 } ingamemenu_t;
 
 static ingamemenu_t	s_ingame;
 
-static int ingame_buttons[10][2] =
-{
-{152,220},
-{152,220 + INGAME_MENU_VERTICAL_SPACING},
-{152,220 + (INGAME_MENU_VERTICAL_SPACING *2)},
-{152,220 + (INGAME_MENU_VERTICAL_SPACING *3)},
-{152,220 + (INGAME_MENU_VERTICAL_SPACING *4)},
-
-{368,220},
-{368,220 + INGAME_MENU_VERTICAL_SPACING},
-{368,220 + (INGAME_MENU_VERTICAL_SPACING *2)},
-{368,220 + (INGAME_MENU_VERTICAL_SPACING *3)},
-{368,220 + (INGAME_MENU_VERTICAL_SPACING *4)},
-};
-
-
 typedef struct 
 {
 	menuframework_s	menu;
@@ -168,6 +154,10 @@
 		UI_TeamOrdersMenu(0);
 		break;
 
+	case ID_IGNORES:
+		UI_IgnoresMenu();
+		break;
+
 	case ID_RESUME:
 		UI_PopMenu();
 		break;
@@ -207,6 +197,9 @@
 	UI_DrawHandlePic(s_ingame.teamorders.generic.x - 14, s_ingame.teamorders.generic.y, 
 		MENU_BUTTON_MED_HEIGHT, MENU_BUTTON_MED_HEIGHT, uis.graphicButtonLeftEnd);
 
+	UI_DrawHandlePic(s_ingame.teamorders.generic.x - 14, s_ingame.ignores.generic.y, 
+		MENU_BUTTON_MED_HEIGHT, MENU_BUTTON_MED_HEIGHT, uis.graphicButtonLeftEnd);
+
 	UI_DrawHandlePic(s_ingame.setup.generic.x - 14, s_ingame.setup.generic.y, 
 		MENU_BUTTON_MED_HEIGHT, MENU_BUTTON_MED_HEIGHT, uis.graphicButtonLeftEnd);
 
@@ -342,6 +335,24 @@
 	s_ingame.teamorders.textcolor			= CT_BLACK;
 	s_ingame.teamorders.textcolor2			= CT_WHITE;
 
+	y += INGAME_MENU_VERTICAL_SPACING;
+	s_ingame.ignores.generic.type			= MTYPE_BITMAP;
+	s_ingame.ignores.generic.flags			= QMF_HIGHLIGHT_IF_FOCUS;
+	s_ingame.ignores.generic.x			= x;
+	s_ingame.ignores.generic.y			= y;
+	s_ingame.ignores.generic.id			= ID_IGNORES;
+	s_ingame.ignores.generic.name			= BUTTON_GRAPHIC_LONGRIGHT;
+	s_ingame.ignores.generic.callback		= InGame_Event; 
+	s_ingame.ignores.width				= MENU_BUTTON_MED_WIDTH;
+	s_ingame.ignores.height				= MENU_BUTTON_MED_HEIGHT;
+	s_ingame.ignores.color				= CT_DKPURPLE1;
+	s_ingame.ignores.color2				= CT_LTPURPLE1;
+	s_ingame.ignores.textX				= MENU_BUTTON_TEXT_X;
+	s_ingame.ignores.textY				= MENU_BUTTON_TEXT_Y;
+	s_ingame.ignores.textEnum			= MBT_INGAMEIGNORES;
+	s_ingame.ignores.textcolor			= CT_BLACK;
+	s_ingame.ignores.textcolor2			= CT_WHITE;
+
 	// make sure it's a team game
 	trap_GetConfigString( CS_SERVERINFO, info, sizeof(info) );
 	if( (atoi( Info_ValueForKey( info, "g_gametype" ) )) < GT_TEAM)
@@ -474,6 +485,7 @@
 	Menu_AddItem( &s_ingame.menu, &s_ingame.addbots );
 	Menu_AddItem( &s_ingame.menu, &s_ingame.removebots );
 	Menu_AddItem( &s_ingame.menu, &s_ingame.teamorders );
+	Menu_AddItem( &s_ingame.menu, &s_ingame.ignores );
 	Menu_AddItem( &s_ingame.menu, &s_ingame.setup );
 	Menu_AddItem( &s_ingame.menu, &s_ingame.server );
 	Menu_AddItem( &s_ingame.menu, &s_ingame.leave );
Index: README.txt
===================================================================
--- README.txt	(revision 0)
+++ README.txt	(revision 42)
@@ -0,0 +1,71 @@
+The Star Trek Voyager: Elite Force codebase project
+
+This project is meant to be a stable codebase with obvious bugs that
+Ravensoft left in there removed and a few new features added.
+
+This project was originally started because my modification of the Quake3
+engine to run EF turned out to be a bit problematic. The SnapVector macro
+yields slightly different results in the virtual machine interpreter of the
+newer quake3 compared to the older quake3 eliteforce is based off.
+As a result, you cannot jump as high as you could if you set com_maxfps to
+some magic values like 74, 85, 125 etc..
+To get the same movement as with the original EliteForce in these new engine
+releases the multiplayer VM code must be modified to emulate the old
+behaviour.
+So my goal is that every active player and every server will install these
+modifications to allow for smooth movement on both, servers using the new
+engine release and for good motion prediction on the client side. I realize
+it may well be that this never happens as getting people to install new pak
+files would be a major undertaking. I thought, if I attempt to do so in the
+first place, I can as well try to get in a few improvements as long as they
+don't change gameplay. I am not trying to insert new weapons, models,
+gametypes etc...
+
+A few todos:
+ - Ignoring text messages from players that are a nuisance
+ - Unlagged code (can be switched on/off with a cvar)
+
+If you have made changes that do *not* change gameplay as mentioned above
+and you think it really improves EliteForce, feel free to send the patches
+to: arny@ats.s.bawue.de
+If your code is reasonably clean, I will definitely add it to the
+repository!
+
+Now for the using of this code:
+I have left all non-C files from Ravensoft intact. This means, you should
+probably be able to build this release under windows like you build the
+original EF source released by raven.
+For users on unixoid environments, I have included a few Makefiles that make
+the job of building easier. The Makefiles are designed to work under Linux
+so if you use another OS you may need to edit the three Makefiles included
+in the game, cgame and ui directories to make this build properly.
+
+There are two different types of builds, namely the shared library and the
+building of QVMs.
+Building the shared objects only requires typing in "make so"
+in the main directory where this README resides. If you have a working gcc
+installation, this is all you need to do. The rest is being handled by the
+Makefiles and in the end you should have three resulting files in the baseef
+directory.
+Building QVMs is easy, too. You need a few special bins, though, namely
+q3lcc, q3rcc, q3cpp and q3asm. They can be found when building Quake3 from
+icculus.org: http://icculus.org/quake3/
+Get the source code, compile it (you may want to only build the dedicated
+server if you have no OpenGL support... consult the README in their project
+on how this works). When compilation is done, the four required binaries can
+be found in code/tools/. Copy the files to the bin/ directory that is in the
+same dir with this README.
+Now just do: "make qvm" in this dir and all QVMs should be in baseef/vm/.
+
+Careful when compiling both, QVMs and shared objects. gcc and the q3lcc
+compiler produce incompatible output.
+Make sure to run "make clean" before you change from QVM to shared objects
+and vice versa.
+
+And last but not least: I already installed a mechanism to produce a pak
+file that only works if you have zip installed.
+make pak
+will result in all three QVMs being packed into pak4.pk3 in baseef :)
+Rename it as you see fit.
+
+ - Thilo Schulz, 16.03.2006
Index: Makefile
===================================================================
--- Makefile	(revision 0)
+++ Makefile	(revision 42)
@@ -0,0 +1,17 @@
+default: qvm
+qvm: build_qvm
+so: build_so
+
+ZIP = zip
+
+build_qvm:
+	$(MAKE) -C Code-DM build_qvm
+build_so:
+	$(MAKE) -C Code-DM build_so
+
+clean:
+	$(MAKE) -C Code-DM clean
+	rm -f baseef/*.so baseef/*.pk3 baseef/vm/*.qvm
+
+pak: qvm
+	cd baseef && rm -f *.pk3 && $(ZIP) -r pak92.pk3 vm/* ext_data/* -x \*~
