]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'master' into mirceakitsune/universal_reload_system
authorMircea Kitsune <sonichedgehog_hyperblast00@yahoo.com>
Mon, 28 Feb 2011 13:27:21 +0000 (15:27 +0200)
committerMircea Kitsune <sonichedgehog_hyperblast00@yahoo.com>
Mon, 28 Feb 2011 13:27:21 +0000 (15:27 +0200)
15 files changed:
defaultXonotic.cfg
qcsrc/menu/anim/animhost.c
qcsrc/menu/item/button.c
qcsrc/menu/item/slider.c
qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c
qcsrc/server/defs.qh
qcsrc/server/g_world.qc
qcsrc/server/miscfunctions.qc
qcsrc/server/mutators/base.qc
qcsrc/server/mutators/base.qh
qcsrc/server/sv_main.qc
qcsrc/server/t_items.qc
qcsrc/server/t_quake3.qc
quake.rc
tooltips.db.de [new file with mode: 0644]

index c76176a843fbbff851f86403ba198fb2c3c05f41..d038dc523c1df5762333a6c82066c39f789511e4 100644 (file)
@@ -2103,7 +2103,6 @@ exec ctfscoring-ai.cfg
 exec effects-normal.cfg
 exec physicsX0.cfg
 exec turrets.cfg
-exec font-xolonium.cfg
 
 // hud cvar descriptions
 exec _hud_descriptions.cfg
index fc345e44588a1fba5f8c77714524b310101ae28b..48a45bda8465795e8883373ab088918783c4c0d3 100644 (file)
@@ -65,6 +65,7 @@ void AnimHost_removeAnim(entity me, entity other)
                n.prevSibling = p;
        else
                me.lastChild = p;
+       remove(other);
 }
 
 void AnimHost_removeAllAnim(entity me)
@@ -141,7 +142,6 @@ void AnimHost_finishAllAnim(entity me)
        {
                tmp = e;
                e = tmp.prevSibling;
-               me.removeAnim(me, tmp);
                tmp.finishAnim(tmp);
        }
 }
@@ -155,7 +155,6 @@ void AnimHost_finishObjAnim(entity me, entity obj)
                {
                        tmp = e;
                        e = tmp.prevSibling;
-                       me.removeAnim(me, tmp);
                        tmp.finishAnim(tmp);
                }
        }
@@ -167,15 +166,11 @@ void AnimHost_tickAll(entity me)
        for(e = me.firstChild; e; e = e.nextSibling)
        {
                e.tick(e, time);
-       }
-       for(e = me.firstChild; e; e = e.nextSibling)
-       {
                if (e.isFinished(e))
                {
                        tmp = e;
                        e = tmp.prevSibling;
                        me.removeAnim(me, tmp);
-                       remove(tmp);
                }
        }
 }
index 871685f53797cfa38e11603e1297a15c3eb96a62..527672d254f41acb6795a336f05da00d3ffb7e45 100644 (file)
@@ -8,6 +8,7 @@ CLASS(Button) EXTENDS(Label)
        METHOD(Button, mousePress, float(entity, vector))
        METHOD(Button, mouseDrag, float(entity, vector))
        METHOD(Button, mouseRelease, float(entity, vector))
+       METHOD(Button, focusEnter, void(entity))
        ATTRIB(Button, onClick, void(entity, entity), SUB_Null)
        ATTRIB(Button, onClickEntity, entity, NULL)
        ATTRIB(Button, src, string, string_null)
@@ -69,12 +70,12 @@ float Button_mouseDrag(entity me, vector pos)
 float Button_mousePress(entity me, vector pos)
 {
        me.mouseDrag(me, pos); // verify coordinates
-       if(cvar("menu_sounds"))
-               localsound("sound/misc/menu2.wav");
        return 1;
 }
 float Button_mouseRelease(entity me, vector pos)
 {
+       if(cvar("menu_sounds"))
+               localsound("sound/misc/menu2.wav");
        me.mouseDrag(me, pos); // verify coordinates
        if(me.pressed)
        {
@@ -88,7 +89,12 @@ void Button_showNotify(entity me)
 {
        me.focusable = !me.disabled;
 }
-.float playedfocus;
+void Button_focusEnter(entity me)
+{
+       if(cvar("menu_sounds") > 1)
+               localsound("sound/misc/menu1.wav");
+       SUPER(Button).focusEnter(me);
+}
 void Button_draw(entity me)
 {
        vector bOrigin, bSize;
@@ -159,14 +165,5 @@ void Button_draw(entity me)
                        me.onClick(me, me.onClickEntity);
        }
        me.clickTime -= frametime;
-
-       if(cvar("menu_sounds") > 1)
-               if(me.focused && !me.playedfocus)
-               {
-                       localsound("sound/misc/menu1.wav");
-                       me.playedfocus = 1;
-               }
-               else if(!me.focused && me.playedfocus)
-                       me.playedfocus = 0;
 }
 #endif
index 9a8a35fdcbc699d03ba12742342bb45f0e7fe0f4..eb8e5cb4a128ca823f669425fa66b6f6fd2f59df 100644 (file)
@@ -10,6 +10,7 @@ CLASS(Slider) EXTENDS(Label)
        METHOD(Slider, mousePress, float(entity, vector))
        METHOD(Slider, mouseDrag, float(entity, vector))
        METHOD(Slider, mouseRelease, float(entity, vector))
+       METHOD(Slider, focusEnter, void(entity))
        METHOD(Slider, valueToText, string(entity, float))
        METHOD(Slider, toString, string(entity))
        METHOD(Slider, setValue, void(entity, float))
@@ -47,7 +48,6 @@ ENDCLASS(Slider)
 void Slider_setValue(entity me, float val)
 {
        if (me.animated) {
-               anim.stopObjAnim(anim, me);
                anim.removeObjAnim(anim, me);
                makeHostedEasing(me, Slider_setSliderValue, easingQuadInOut, 1, me.sliderValue, val);
        } else {
@@ -156,7 +156,7 @@ float Slider_mouseDrag(entity me, vector pos)
        if(me.disabled)
                return 0;
 
-       anim.finishObjAnim(anim, me);
+       anim.removeObjAnim(anim, me);
        animed = me.animated;
        me.animated = false;
 
@@ -235,12 +235,12 @@ float Slider_mousePress(entity me, vector pos)
                        //me.mouseDrag(me, pos);
                }
        }
-       if(cvar("menu_sounds"))
-               localsound("sound/misc/menu2.wav");
        return 1;
 }
 float Slider_mouseRelease(entity me, vector pos)
 {
+       if(cvar("menu_sounds"))
+               localsound("sound/misc/menu2.wav");
        me.pressed = 0;
        if(me.disabled)
                return 0;
@@ -250,6 +250,12 @@ void Slider_showNotify(entity me)
 {
        me.focusable = !me.disabled;
 }
+void Slider_focusEnter(entity me)
+{
+       if(cvar("menu_sounds") > 1)
+               localsound("sound/misc/menu1.wav");
+       SUPER(Slider).focusEnter(me);
+}
 void Slider_draw(entity me)
 {
        float controlLeft;
index 8a804f91f149dad3502871fdd70be56fcdfb6940..2b7b9a38464ab62cfe8c4285a6464ee2e3ceec6f 100644 (file)
@@ -136,13 +136,12 @@ void XonoticPlayerSettingsTab_fill(entity me)
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Crosshair color:"));
-               me.TD(me, 1, 0.9, e = makeXonoticCheckBox(0, "crosshair_color_per_weapon", _("Per weapon")));
-                       setDependent(e, "crosshair_color_by_health", 0, 0);
-               me.TD(me, 1, 0.9, e = makeXonoticCheckBox(0, "crosshair_color_by_health", _("By health")));
-                       setDependent(e, "crosshair_color_per_weapon", 0, 0);
+               me.TD(me, 1, 0.9, e = makeXonoticRadioButton(4, "crosshair_color_per_weapon", string_null, _("Per weapon")));
+               me.TD(me, 1, 0.9, e = makeXonoticRadioButton(4, "crosshair_color_by_health", string_null, _("By health")));
        me.TR(me);
-               me.TDempty(me, 0.4);
-               me.TD(me, 2, 2.6, e = makeXonoticColorpickerString("crosshair_color", "crosshair_color"));
+               me.TDempty(me, 0.3);
+               me.TD(me, 1, 0.9, e = makeXonoticRadioButton(4, string_null, string_null, _("Custom")));
+               me.TD(me, 2, 1.8, e = makeXonoticColorpickerString("crosshair_color", "crosshair_color"));
                        setDependentAND(e, "crosshair_color_per_weapon", 0, 0, "crosshair_color_by_health", 0, 0);
        me.TR(me);
        me.TR(me);
index df80e703b7fe14dbd73c5f0c3148e34ff9a29d23..39eebe7fb8a6d54059b77431547de55fb01194a5 100644 (file)
@@ -84,8 +84,6 @@ float maxclients;
 .vector        pos1, pos2;
 .vector        mangle;
 
-.float cvar_cl_hitsound;
-
 .float pain_finished;                  //Added by Supajoe
 .float pain_frame;                     //"
 .float statdraintime;                  // record the one-second intervals between draining health and armour when they're over 100
@@ -402,10 +400,6 @@ float assault_attacker_team;
 .float speedrunning;
 
 // Q3 support
-.float notteam;
-.float notsingle;
-.float notfree;
-.float notq3a;
 float q3acompat_machineshotgunswap;
 
 // database
index 57d0071d2f063d78c0a5a9031f7b087ca795ac8f..2a8093a2fad560aa19cec8f47f93608a3af0a83a 100644 (file)
@@ -2844,14 +2844,14 @@ void EndFrame()
                {
                        if(self.enemy.typehitsound)
                                self.typehit_time = time;
-                       else if(self.enemy.hitsound && self.cvar_cl_hitsound)
+                       else if(self.enemy.hitsound)
                                self.hit_time = time;
                }
                else
                {
                        if(self.typehitsound)
                                self.typehit_time = time;
-                       else if(self.hitsound && self.cvar_cl_hitsound)
+                       else if(self.hitsound)
                                self.hit_time = time;
                }
        }
index c04c477cdf778cc0b32be50b5e628999342ad3f4..364c925991a893ccb2a75749cb57d9bd8a573104 100644 (file)
@@ -603,7 +603,6 @@ void GetCvars(float f)
        GetCvars_handleFloat(s, f, cvar_cl_noantilag, "cl_noantilag");
        GetCvars_handleFloat(s, f, cvar_cl_voice_directional, "cl_voice_directional");
        GetCvars_handleFloat(s, f, cvar_cl_voice_directional_taunt_attenuation, "cl_voice_directional_taunt_attenuation");
-       GetCvars_handleFloat(s, f, cvar_cl_hitsound, "cl_hitsound");
        GetCvars_handleFloat(s, f, cvar_cl_accuracy_data_share, "cl_accuracy_data_share");
        GetCvars_handleFloat(s, f, cvar_cl_accuracy_data_receive, "cl_accuracy_data_receive");
 
index 0b1bea45edc46983f5f555db12eb3c9d0c56e043..6978496802d1d61585b46ea45bb3d937e32db1f8 100644 (file)
@@ -87,19 +87,48 @@ float CallbackChain_Call(entity cb)
        return r; // callbacks return an error status, so 0 is default return value
 }
 
-float Mutator_Add(float(float) func)
+#define MAX_MUTATORS 8
+string loaded_mutators[MAX_MUTATORS];
+float Mutator_Add(mutatorfunc_t func, string name)
 {
+       float i, j;
+       j = -1;
+       for(i = 0; i < MAX_MUTATORS; ++i)
+       {
+               if(name == loaded_mutators[i])
+                       return 1; // already added
+               if(!loaded_mutators[i])
+                       j = i;
+       }
+       if(j < 0)
+       {
+               backtrace("WARNING: too many mutators, cannot add any more\n");
+               return 0;
+       }
+       loaded_mutators[j] = name;
+
        if(func(MUTATOR_ADDING) == 0)
        {
                // good
                return 1;
        }
        backtrace("WARNING: when adding mutator: adding failed\n");
-       Mutator_Remove(func);
+       Mutator_Remove(func, name);
        return 0;
 }
-void Mutator_Remove(float(float) func)
+void Mutator_Remove(float(float) func, string name)
 {
+       float i;
+       for(i = 0; i < MAX_MUTATORS; ++i)
+               if(name == loaded_mutators[i])
+                       break;
+       if(i >= MAX_MUTATORS)
+       {
+               backtrace("WARNING: removing not-added mutator\n");
+               return;
+       }
+       loaded_mutators[i] = string_null;
+
        if(func(MUTATOR_REMOVING) != 0)
        {
                // baaaaad
index aa581228bd474fc32a12bc885291d0ae9a0c9775..05a5187e508709528c16cee43e7938027fb64d5b 100644 (file)
@@ -16,11 +16,12 @@ float CallbackChain_Call(entity cb);
 
 #define MUTATOR_REMOVING 0
 #define MUTATOR_ADDING 1
-float Mutator_Add(float(float) func);
-void Mutator_Remove(float(float) func); // calls error() on fail
+typedef float(float) mutatorfunc_t;
+float Mutator_Add(mutatorfunc_t func, string name);
+void Mutator_Remove(mutatorfunc_t func, string name); // calls error() on fail
 
-#define MUTATOR_ADD(name) Mutator_Add(MUTATOR_##name)
-#define MUTATOR_REMOVE(name) Mutator_Remove(MUTATOR_##name)
+#define MUTATOR_ADD(name) Mutator_Add(MUTATOR_##name, #name)
+#define MUTATOR_REMOVE(name) Mutator_Remove(MUTATOR_##name, #name)
 #define MUTATOR_DEFINITION(name) float MUTATOR_##name(float mode)
 #define MUTATOR_DECLARATION(name) float MUTATOR_##name(float mode)
 #define MUTATOR_HOOKFUNCTION(name) float HOOKFUNCTION_##name()
index a40e8144d6656904d11f7843bcc4d81e7b68431d..68a86e9c479e7f68a9908fc12230831f2bb50803 100644 (file)
@@ -232,6 +232,7 @@ void StartFrame (void)
 .float anglejitter;
 .string gametypefilter;
 .string cvarfilter;
+float DoesQ3ARemoveThisEntity();
 void SV_OnEntityPreSpawnFunction()
 {
        if(self.gametypefilter != "")
@@ -350,6 +351,12 @@ void SV_OnEntityPreSpawnFunction()
                }
        }
 
+       if(DoesQ3ARemoveThisEntity())
+       {
+               remove(self);
+               return;
+       }
+
        // support special -1 and -2 angle from radiant
        if (self.angles == '0 -1 0')
                self.angles = '-90 0 0';
index 143b3be4879d79cc2993a685f275e0a1cc2e0bee..5cd714b652a64f832e7c03633e40567596f6111f 100644 (file)
@@ -735,36 +735,6 @@ void StartItem (string itemmodel, string pickupsound, float defaultrespawntime,
                        waypoint_spawnforitem(self);
                }
 
-               if(teams_matter)
-               {
-                       if(self.notteam)
-                       {
-                               print("removed non-teamplay ", self.classname, "\n");
-                               startitem_failed = TRUE;
-                               remove (self);
-                               return;
-                       }
-               }
-               else
-               {
-                       if(self.notfree)
-                       {
-                               print("removed non-FFA ", self.classname, "\n");
-                               startitem_failed = TRUE;
-                               remove (self);
-                               return;
-                       }
-               }
-
-               if(self.notq3a)
-               {
-                       // We aren't TA or something like that, so we keep the Q3A entities
-                       print("removed non-Q3A ", self.classname, "\n");
-                       startitem_failed = TRUE;
-                       remove (self);
-                       return;
-               }
-
                /*
                 * can't do it that way, as it would break maps
                 * TODO make a target_give like entity another way, that perhaps has
index 11bf880e60bf102b1d992c25698e8ff471973fbd..8cc7e479791b6a3fc8bec91c48383355953f2563 100644 (file)
@@ -130,3 +130,54 @@ void spawnfunc_team_CTF_redspawn()   { spawnfunc_info_player_team1();  }
 void spawnfunc_team_CTF_bluespawn()  { spawnfunc_info_player_team2();  }
 
 void spawnfunc_item_flight()         { spawnfunc_item_jetpack();       }
+
+.float notteam;
+.float notsingle;
+.float notfree;
+.float notq3a;
+.float notta;
+.string gametype;
+float DoesQ3ARemoveThisEntity()
+{
+       // Q3 style filters (DO NOT USE, THIS IS COMPAT ONLY)
+
+       if(self.notq3a)
+               if(!teams_matter || g_tdm || g_ctf)
+                       return 1;
+
+       if(self.notta)
+               if not(!teams_matter || g_tdm || g_ctf)
+                       return 1;
+
+       if(self.notsingle)
+               if(maxclients == 1)
+                       return 1;
+
+       if(self.notteam)
+               if(teams_matter)
+                       return 1;
+
+       if(self.notfree)
+               if(!teams_matter)
+                       return 1;
+
+       if(self.gametype)
+       {
+               string gametypename;
+               // static char *gametypeNames[] = {"ffa", "tournament", "single", "team", "ctf", "oneflag", "obelisk", "harvester", "teamtournament"};
+               gametypename = "ffa";
+               if(teams_matter)
+                       gametypename = "team";
+               if(g_arena)
+                       gametypename = "tournament";
+               if(g_ctf)
+                       gametypename = "ctf";
+               if(maxclients == 1)
+                       gametypename = "single";
+               // we do not have the other types (oneflag, obelisk, harvester, teamtournament)
+               if(strstrofs(self.gametype, gametypename, 0) < 0)
+                       return 1;
+       }
+
+       return 0;
+}
index a85fbab69b2c430a37a44b7c9bb3e6c885cf4e05..2c0f409ea23841e6dc4d41c39eda608da611b9cf 100644 (file)
--- a/quake.rc
+++ b/quake.rc
@@ -3,6 +3,7 @@ exec config.cfg
 maxplayers $menu_maxplayers
 exec data/campaign.cfg
 exec config_update.cfg
+exec font-xolonium.cfg
 exec autoexec.cfg
 stuffcmds
 //startdemos demos/demo1 demos/demo2 demos/demo3
diff --git a/tooltips.db.de b/tooltips.db.de
new file mode 100644 (file)
index 0000000..dbefdef
--- /dev/null
@@ -0,0 +1,221 @@
+0
+\XonoticSingleplayerDialog\Spiele die Einzelspieler-Kampagne oder habe Instant-Action Spiele gegen Bots
+
+
+\XonoticMultiplayerDialog\Spiele online, gegen deine Freunde im LAN, gucke dir Demos an oder ändere deine Spieler-Einstellungen
+\XonoticMultiplayerDialog/Server\Finde Server um auf ihnen zu spielen
+\menu_slist_showempty\Zeige leere Server
+\menu_slist_showfull\Zeige volle Server, die keinen freien Platz mehr haben
+\net_slist_pause\Unterbreche die automatische Aktualisierung der Serverliste um ein "Herumspringen" zu verhindern
+\XonoticMultiplayerDialog/Info\Zeige mehr Informationen über den markierten Server
+\XonoticMultiplayerDialog/Bookmark\Setze ein Lesezeichen für den markierten Server um ihn beim nächsten mal schneller wiederzufinden
+\XonoticMultiplayerDialog/Havoc\Wechsel in den Havoc Modus, welcher zu Änderungen des Spielverhaltens führt
+\XonoticMultiplayerDialog/Starten\Hoste dein eigenes Spiel
+\XonoticMultiplayerDialog/Demos\Gucke dir Demos an
+\XonoticMultiplayerDialog/Spieler-Einstellungen\Ändere deine Spieler-Einstellungen
+
+\XonoticTeamSelectDialog/'bestem' Team beitreten\Automatische Auswahl des Teams (bevorzugt)
+\XonoticTeamSelectDialog/rot\Trete dem roten Team bei
+\XonoticTeamSelectDialog/blau\Trete dem blauen Team bei
+\XonoticTeamSelectDialog/gelb\Trete dem gelben Team bei
+\XonoticTeamSelectDialog/pink\Trete dem pinken Team bei
+
+\timelimit_override\Beim Erreichen dieses Zeitlimits in Minuten endet das Spiel
+\fraglimit_override\Die Anzahl an Frags die benötigt wird, bevor das Spiel endet
+\menu_maxplayers\Die maximale Anzahl der Spieler oder Bots, welche sich mit dem Server gleichzeitig verbinden können
+\bot_number\Anzahl von Bots auf dem Server
+\skill\Gib an, wie erfahren die Bots sein sollen
+\g_maplist_votable\Anzahl von Maps, welche am Ende des Spiels zur Wahl stehen
+\sv_vote_simple_majority_factor\Einfache Mehrheit gewinnt die Abstimmung
+\XonoticMultiplayerDialog/Erweiterte Einstellungen...\Erweiterte Einstellungen für den Server
+\XonoticMultiplayerDialog/Mutators...\Mutators und Waffen-Arenen
+\g_cloaked\Alle Spieler sind fast unsichtbar
+\g_footsteps\Aktiviere den Schrittklang
+\g_midair\Dem Gegner Schaden zuzufügen ist nur möglich, wenn er sich in der Luft befindet
+\g_vampire\Der Schaden dem du anderen Spielern zufügst, wird deiner Lebensenergie hinzugefügt
+\g_bloodloss\Höhe der Lebensenergie, bei der dein Spieler auf Grund von Blutverlust betäubt wirkt
+\sv_gravity\Lass Gegenstände langsamer zu Boden fallen, ein niedrigerer Wert verringert die Gravitation
+\g_grappling_hook\Neu erzeugte/auferstandene Spieler starten mit dem Enterhaken
+\g_jetpack\Neu erzeugte/auferstandene Spieler starten mit dem Jetpack
+\g_pinata\Spieler lassen alle Waffen fallen, die sie besaßen, wenn sie sterben
+\g_weapon_stay\Waffen bleiben liegen, auch wenn sie aufgenommen wurden
+\g_weaponarena\Auswahl einer Waffen-Arena führt dazu, dass jeder Spieler mit der gewählten Waffe startet. Diese hat unendlich viel Munition und andere Waffen sind nicht vorhanden..
+\menu_weaponarena_with_laser\Aktiviere auch Laser in der Waffen-Arena
+\g_minstagib\Alle Spieler starten mit der Minstanex, eine elektromagnetische Schienenkanone mit unendlich viel Schaden. Wenn ein Spieler keine Munition mehr hat, bleiben ihm 10 Sekunden welche zu finden, ansonsten stirbt er. Der 2. Feuermodus ist Laser, welcher keinen Schaden hinzufügen kann. Dieser eignet sich gut für Tricksprünge.
+\g_nixnex\keine Gegenstände in Xonotic - Anstelle der Möglichkeit Waffen aufzusammeln, spielen alle mit der gleichen Waffe. Nach einiger Zeit startet ein Countdown, danach wechseln alle zu einer neuen gleichen Waffe.
+\g_nixnex_with_laser\In NixNex ist immer als zweite Waffe der Laser vorhanden
+\XonoticMultiplayerDialog/All\Wähle alle Maps
+\XonoticMultiplayerDialog/None\Wähle alle Maps ab
+
+
+\XonoticMultiplayerDialog/Timedemo\Teste wie schnell dein Computer die markierte Demo abspielen kann - Es wird ein Benchmark-Test ausgeführt, dessen Ergebniss in "gamedir/data/" gespeichert wird.
+
+\fov\Sichtfeld in Grad mit einem Wert zwischen 60 und 130, Standard ist 90
+\cl_bobcycle\Setze den Wert für das "Sicht-Wackeln". Deaktivieren für kein "Sicht-Wackeln"
+\cl_zoomfactor\Setze den Vergrößerungsfaktor
+\cl_zoomsensitivity\Bestimme die Änderung der Empfindlichkeit während des Vergrößerns, Werte von 0 (geringste Sensiviät) bis 1 (keine Änderung der Sensivität sind möglich)
+\cl_zoomspeed\Bestimme wie schnell der angegebene Vergrößerungsfaktor erreicht werden soll, deaktivieren für sofortige Vergrößerung
+\XonoticMultiplayerDialog/Waffeneinstellungen...\Lege deine bevorzugten Waffen fest, sowie den automatischen Wechsel der Waffenmodelle und Weiteres
+
+\cl_weaponpriority_useforcycling\Benutze die oben angegebene Liste, wenn die Waffen mit Hilfe des Mausrads gewechselt werden
+\cl_autoswitch\Wechsel automatisch zu der neu aufgesammelten Waffe, wenn diese besser ist als die, welche Du zur Zeit trägst
+\r_drawviewmodel\Darstellung der Waffe im Spiel
+\cl_gunalign\Position der Waffe, links oder rechts; erfordert Neustart
+
+\crosshair_per_weapon\Ermögliche unterschiedliche Fadenkreuze für unterschiedliche Waffen, zu empfehlen, wenn du ohne dargstelltes Waffenmodel spielst
+\crosshair_color_override\Ermögliche unterschiedliche Farben für unterschiedliche Fandenkreuze, abhängig von der Waffe die gerade getragen wird
+\crosshair_size\Lege die Größe des Fadenkreuzes fest
+\crosshair_color_alpha\Lege die Opazität des Fadenkreuzes fest
+\crosshair_color_red\Roter Farbanteil des Fadenkreuzes
+\crosshair_color_green\grüner Farbanteil des Fadenkreuzes
+\crosshair_color_blue\blauer Farbanteil des Fadenkreuzes
+\sbar_hudselector\Benutze das alte HUD Layout
+\XonoticMultiplayerDialog/Radar, HUD & Waypoints...\Stelle Radar, HUD & Wegpunkte ein
+\_cl_name\Lege deinen Namen im Spiel fest
+
+\XonoticSettingsDialog\Ändere die Spiel-Einstellungen
+\XonoticCreditsDialog\Die Xonotic Credits
+\XonoticTeamSelectDialog\-
+\XonoticMutatorsDialog\-
+\XonoticMapInfoDialog\-
+\XonoticUserbindEditDialog\-
+\XonoticWinnerDialog\-
+\XonoticWeaponsDialog\-
+\XonoticRadarDialog\-
+\XonoticServerInfoDialog\-
+\XonoticCvarsDialog\-
+
+\XonoticQuitDialog\Beende das Spiel
+\XonoticQuitDialog/Ja\Zurück an die Arbeit...
+\XonoticQuitDialog/Nein\Ich muss noch ein paar Typen fraggen!
+
+\XonoticSettingsDialog/Eingabe\Einstellungen der Eingabe
+\sensitivity\Maus Geschwindigkeitsmultiplikator
+\menu_mouse_speed\Maus Geschwindigkeitsmultiplikator im Menü, hat keinen Effekt auf die Mausbewegung im Spiel
+\m_filter\Glättet die Mausbewegung, aber verringert die Reaktion des Zielens etwas
+\m_pitch\Umkehren der Mausbewegung entlang der Y-Achse
+\vid_dgamouse\Verwende die DGA Maus Eingabe
+\con_closeontoggleconsole\Schließen der Konsole auch mit der Taste, die zum Öffnen verwendet wird
+\sbar_showbinds\Display actions / bound keys in the strings shown during the game
+\cl_showpressedkeys\Lass dir die gedrückten Tasten anderer Spieler anzeigen
+
+\XonoticSettingsDialog/Video\Video Einstellungen
+\vid_width\Einstellung der zu verwendenden Bildschirmauflösung
+\vid_bitsperpixel\Bestimme wie viele Bits pro Pixel (BPP) gerendert werden sollen, 32 ist der bevorzugte Wert
+\vid_fullscreen\Aktiviere den Vollbildmodus (Standard: aktiviert)
+\vid_vsync\Aktiviere die vertikale Synchronization um ein Zeilenreißen zu unterdrücken, die FPS werden auf den Wert der Bildwiederholungsrate deines Monitors gesetzt (Standard: deaktiviert)
+\r_glsl\Aktiviere OpenGL 2.0 Enable OpenGL 2.0 Pixel-Shader für Lichteffekte (Standard: aktiviert)
+\gl_vbo\Speicher Eckpunkte und einige Dreiecke der statischen Geometrie im Videospeicher um ein schnelleres Rendern zu ermöglichen (Standard: aktiviert)
+\r_depthfirst\erhindere das Überblenden indem nur die das Tiefenbild der Szene vor dem Licht gerendert wird (Standard: deaktiviert)
+\gl_texturecompression\Komprimiere die Texturen für Grafikkarten mit einem geringen Grafikspeicher (Standard: deaktiviert)
+\gl_finish\Die Grafikkarte wartet bis die CPU die Berechnung eines jeden Frames beendet hat, dies kann bei merkwürdigen Verhalten der Eingabe helfen (Standard: deaktiviert)
+\v_brightness\Helligkeit von Schwarz (Standard: 0)
+\v_contrast\Helligkeit von Weiß (Standard: 1)
+\v_gamma\Korrekturwert für die Kontraststärke (Gamma-Wert), Helligkeitseffekt, der keinen Einfluss auf Weiß und Schwarz hat (Standard: 1.125)
+\v_contrastboost\Faktor für die Änderung des Kontrasts in dunklen Bildteilen (Standard: 1)
+\r_glsl_saturation\Sättigungskorrektur (0 = Graustufenbild, 1 = normales Bild, 2 = übersättigtes Bild), benötigt GLSL Farbkontrolle (Standard: 1)
+\v_glslgamma\Aktiviere die Verwendung von GLSL um die Gamma-Korrektur zu ermöglichen, kann die Leistung stark verringern (Standard: Deaktiviert)
+\r_ambient\Ambientebeleuchtung, ein zu hoch eingestellter Wert lässt das Map matt und flach erscheinenht (Standard: 4)
+\r_hdr_scenebrightness\Globales Rendern der Helligkeit (Standard: 1)
+\vid_samples\Aktiviere Antialiasing um Ecken der 3D-Geometire zu glätten. Kann die Leistung stark verringern (Standard: deaktiviert)
+\v_flipped\Linkshänder Modus für arme Leute (Standard: deaktiviert)
+
+\XonoticSettingsDialog/Effekte\Einstellungen der Effekte
+\r_subdivisions_tolerance\Ändere die Rundheit/Glattheit von Kurven in der Map (Standard: Normal)
+\gl_picmip\Ändere die Schärfe von Texturen. Ein geringerer Wert verringert die Auslastung des Speichers, aber lässt die Texturen verschwommen aussehen. (Standard: Gut)
+\r_picmipworld\Wenn aktiviert, wird nur die Texturqualität von Modellen verringert (Standard: aktiviert)
+\mod_q3bsp_nolightmaps\Verwende hochauflösende Lightmaps, welche sehr schön aussehen, aber etwas mehr Videospeicher benötigen (Standard: aktiviert)
+\cl_particles_quality\Faktor für die Anzahl von Partikel. Weniger beudetet weniger Parikel, was zu einer besseren Performance führt (Standard: 0.5)
+\r_drawparticles_drawdistance\Weiter entfernte Partikel werden nicht dargestellt (Standard 1000)
+\cl_decals\Aktiviere Dekore (Einschusslöcher und Blut) (Standard: aktiviert)
+\r_drawdecals_drawdistance\Weiter entfernte Dekore werden nicht dargestellt (Standard: 300)
+\cl_decals_time\Zeit in Sekunden nach dem Dekore verschwinden (Standard: 2)
+\cl_gentle\Blut und Fleischteile werden durch andere, nicht blutige, Effekte ersetzt (Standard: deaktiviert)
+\cl_nogibs\Verringere die Anzahl von Fleischteilen oder entferne sie vollständig (Standard: viele)
+\v_kicktime\Wert für die Dauer der Beeinträchtigung der Sicht durch einen Schaden (Standard: 0)
+\gl_texture_anisotropy\Qualität für das Filtern von Anisotropie (Standard: 1x)
+\r_glsl_deluxemapping\Verwende ein-Pixel Lichteffekte (default: enabled)
+\r_shadow_gloss\Aktiviere Glanzeffekte für Texturen, wenn die Textur es unterstützt (glossmap) (Standard: aktiviert)
+\gl_flashblend\Enable faster but uglier dynamic lights by rendering bright coronas instead of real dynamic lights (default: disabled)
+\r_shadow_realtime_dlight\Aktiviere das Rendern von dynamischen Lichtern, wie Explosionen und Raketen-Lichter (Standard: aktiviert) 
+\r_shadow_realtime_dlight_shadows\Aktiviere das Rendern von Schatten von dynamischen Lichtern (Standard: deaktiviert)
+\r_shadow_realtime_world\Aktiviere das Rendern der gesamten Echtzeit-Welt-Lichter. Hat einen großen Einfluss auf die Performance (Standard: deaktiviert)
+\r_shadow_realtime_world_shadows\Aktiviere das Rendern von Schatten von Echtzeit-Welt-Lichter (Standard: deaktiviert)
+\r_shadow_usenormalmap\Aktiviere die Verwendung von gerichteter Schattierung auf Texturen (Standard: aktiviert)
+\r_showsurfaces\Komplettes Deaktivieren von Texturen für sehr langsame Hardware. Starke Verbesserung der Performace, sieht aber sehr komisch aus. (Standard: deaktiviert)
+\r_glsl_offsetmapping\Effekt für den Tiefendruck von Texturen, dieser Effekt lässt Texturen mit Bumpmap aus der 2D Ebene "herausgedrückt" erscheinen (Deaktiviert: deaktiviert)
+\r_glsl_offsetmapping_reliefmapping\Higher quality offset mapping, which also has a huge impact on performance (default: disabled)
+\r_water\Reflektions- und Refraktionsqualität, hat einen großen Einfluss auf die Performance von Maps mit reflektierenden Oberflächen (Standard: deaktiviert)
+\r_water_resolutionmultiplier\Auflösung von Reflektion und Refraktion (Standard: gut)
+\r_coronas\Aktiviere die Korona um bestimmte Lichter (Standard: aktiviert)
+\r_coronas_occlusionquery\Verringern der Korona, der Sichtbarkeit entsprechend (Standard: deaktiviert)
+\r_bloom\Aktiviere Bloom-Effekt, der die umgebenden Pixel sehr hell erleuchteter Pixel erhellt. Dieser Effekt hat einen großen Einfluss auf die Leistung (Standard: deaktiviert)
+\r_hdr\Höhere Qualität des Bloom-Effekts, hat einen sehr gr0ßen Einfluss auf die Leistung (Standard: deaktiviert)
+\r_motionblur\Stäre der Bewegungsunschärfe - 0.5 empfohlen
+\r_damageblur\Wert für die Bewegungsunschärfe bei einer Verletzung - 0.4 empfohlen
+
+\XonoticSettingsDialog/Audio\Audio-Einstellungen
+\bgmvolume\-
+\volume\-
+\snd_staticvolume\-
+\snd_worldchannel0volume\-
+\snd_entchannel3volume\-
+\snd_playerchannel6volume\-
+\snd_playerchannel7volume\-
+\snd_entchannel4volume\-
+\snd_playerchannel2volume\-
+\snd_playerchannel1volume\-
+\snd_speed\Ausgangsfrequenz des Tons
+\snd_channels\Anzahl der Kanäle für die Audiowiedergabe
+\snd_swapstereo\Linken und rechten Kanal tauschen
+\snd_spatialization_control\Aktiviere "räumlicheren" Klang (Mischung des linken und rechten Kanals um die Stereo-Trennung leicht zu verringern, für Kopfhörer)
+\cl_voice_directional\Aktiviere richtungsunabhängige Geräusche
+\cl_voice_directional_taunt_attenuation\Distanz in der "Bemerkungen" anderer Spieler gehört werden können
+\cl_autotaunt\Automatisches "Bemerkung", wenn Gegner gefraggt wurden
+\cl_sound_maptime_warning\Ansgage-Sound für die verbleibenden Minuten des Spiels
+\cl_hitsound\Spiele einen Treffer-Sound, wenn der Spieler auf den gezielt wurde, getroffen wurde
+\menu_sounds\Sound abspielen, wenn auf ein Menüitem geklickt wird oder mit dem Mauszeiger auf das Menüitem gezeit wird
+
+\XonoticSettingsDialog/Netzwerk\Netzwerk Einstellungen
+\cl_movement\Aktiviere die Client-seitige Bewegungssimulation
+\cl_nolerp\Enable network update smoothing
+\shownetgraph\Anzeige eines Netzwerkgraphens für gesendete/empfangene Pakete und weitere Informationen
+\_cl_rate\Gib die Netzwerkgeschwindigkeit mit dem  deine Netzwerkgeschwindigkeit mit dem Schieberegler an
+\cl_netfps\Anzahl der Pakete die pro Sekunde zum Server, mit dem man verbunden ist, geschickt werden sollen
+\cl_curl_maxdownloads\Maximale Anzahl der gleichzeitigen HTTP/FTP Downloads
+\cl_curl_maxspeed\Maximale Download Geschwindigkeit
+\cl_port\Stelle den zu verwendenden UDP Port als Client ein,  wenn der Port auf 0 gesetzt ist, wird kein bestimmter Port erzwungen
+
+\XonoticSettingsDialog/Sonstiges\Sonstige Einstellungen, wie Sprache, Menü-Skins
+\showtime\Uhrzeit im Spiel anzeigen, geeignet für Screenshots
+\showdate\Datum im Spiel anzeigen, geeignet für Screenshots
+\showfps\Zeige die gerenderten Frames pro Sekunde
+\cl_showspeed\Zeige die Gescheindigkeit des Spielers
+\cl_showspeed_unit\Wähle die Einheit, in der die Geschindigkeit angezeigt werden soll, qu/s = in/s
+\cl_showacceleration\Zeige die Beschleunigung des Spielers
+\cl_showacceleration_scale\Skalierungsfaktor für das Akzelerometer
+
+\XonoticSettingsDialog/Erweiterte Einstellungen...\Erweiterte Einstellungen, in denen du jede beliebige Variable des Spiels ändern kannst
+\g_friendlyfire\Prozentualer Anteil des Schadens, der Mitspielern hinzugefügt wird
+\g_mirrordamage\Percentage of teamdamage that will be mirrored to you
+\g_tdm_teams_override\Überschreibe die Standardgröße eines Teams in Teammodi
+
+\cl_teamradar_position\-
+\cl_teamradar_size\-
+\cl_teamradar_zoommode\-
+\cl_teamradar_rotation\-
+\cl_teamradar_scale\-
+\cl_teamradar_foreground_alpha\-
+\cl_teamradar_background_alpha\Wert für die Opazität des Radar-Hintergrunds
+\viewsize\Aktiviere/Deaktiviere den HUD-Hintergrund
+\sbar_alpha_bg\Wert für die Opazität des HUD-Hintergrunds
+\sbar_color_bg_r\Roter Farbanteil des HUD-Hintergrunds
+\sbar_color_bg_g\Grüner Farbanteil des HUD-Hintergrunds
+\sbar_color_bg_b\Blauer Farbanteil des HUD-Hintergrunds
+\sbar_color_bg_team\Team-Farben Sättigung des HUD-Hintergrunds
+\cl_hidewaypoints\Lass dir verschiedene Spieltyp spezifische Wegpunkte anzeigen
+\g_waypointsprite_scale\Skalierungsfaktor für Wegpunkte
+\g_waypointsprite_alpha\Verändere den Wert der Transparenz von der Anzeige der Wegpunkte
+\cl_shownames\Lass dir den Namen des Spielers anzeigen auf den du gerade zielst.
+
+\crosshair_hittest\None: do not do hit tests for the crosshair; TrueAim: blur the crosshair when you would not hit the wall; Enemies: also enlarge the crosshair when you would hit an enemy