]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'master' into terencehill/clear_button
authorterencehill <piuntn@gmail.com>
Wed, 25 Jan 2012 17:14:40 +0000 (18:14 +0100)
committerterencehill <piuntn@gmail.com>
Wed, 25 Jan 2012 17:14:40 +0000 (18:14 +0100)
1  2 
gfx/menu/luminos/skinvalues.txt
gfx/menu/wickedx/skinvalues.txt
gfx/menu/xaw/skinvalues.txt
qcsrc/menu/skin-customizables.inc
qcsrc/menu/xonotic/dialog_multiplayer_demo.c
qcsrc/menu/xonotic/dialog_multiplayer_join.c
qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c
qcsrc/menu/xonotic/dialog_settings_network.c

index 82d188cb627c828d403ea9111baf8a0b6c4d6f79,b4102234acd4e8bc06eef8253bfcc90d83538333..c9d958e9586564faf39f5da1103f4541b3492229
@@@ -24,8 -24,8 +24,8 @@@ MARGIN_COLORPICKER              '0 0 0
  //   uses "closebutton" images
  MARGIN_TOP                      8
  MARGIN_BOTTOM                   8
- MARGIN_LEFT                     8
- MARGIN_RIGHT                    8
+ MARGIN_LEFT                     16
+ MARGIN_RIGHT                    16
  MARGIN_COLUMNS                  4
  MARGIN_ROWS                     4
  HEIGHT_DIALOGBORDER             1
@@@ -166,6 -166,7 +166,7 @@@ COLOR_CHECKBOX_D                '1 1 1
  COLOR_DIALOG_MULTIPLAYER        '1 1 1'
  COLOR_DIALOG_SETTINGS           '1 1 1'
  COLOR_DIALOG_TEAMSELECT         '1 1 1'
+ COLOR_DIALOG_SANDBOXTOOLS       '1 1 1'
  COLOR_DIALOG_QUIT               '1 1 1'
  COLOR_DIALOG_ADVANCED           '1 1 1'
  COLOR_DIALOG_MUTATORS           '1 1 1'
@@@ -183,7 -184,6 +184,7 @@@ COLOR_DIALOG_CVARS              '1 0 0
  COLOR_INPUTBOX_N                '1 1 1'
  COLOR_INPUTBOX_F                '1 1 1'
  MARGIN_INPUTBOX_CHARS           1
 +OFFSET_CLEARBUTTON              -0.3
  
  // item: key grabber
  COLOR_KEYGRABBER_TITLES         '1 1 1'
index 0000000000000000000000000000000000000000,d6b7197a1d32c099a1ffbff4fdee06210e066455..ed8ff8ad15ace6cf33d48f8f181081ccc9371999
mode 000000,100755..100755
--- /dev/null
@@@ -1,0 -1,225 +1,226 @@@
+ title Default // "WickedX"
+ author sev
+ // Colors: 'Red Green Blue'
+ // Suffixes: Clicked (_c), Disabled (_d), Focused (_f), Normal (_n)
+ // Background layer scaling:
+ //   Crop (c), Letterbox (l), Height (h), Width (w), Stretch (s)
+ // Background layer positioning:
+ //   Top Left (7), Top Center (8) Top Right (9)
+ //   Middle Left (4), Middle Center (5) Middle Right (6)
+ //   Bottom Left (1), Bottom Center (2) Bottom Right (3)
+ // ALIGN_BACKGROUND(_INGAME) spspsp, s=Scale p=Position
+ //------------------------------------------------------------------------------
+ // Structure (e.g. positions, sizes, margins)
+ //------------------------------------------------------------------------------
+ // item: color picker
+ //   uses "colorpicker" images
+ MARGIN_COLORPICKER              '0 0 0'
+ // item: dialog
+ //   uses "border" images
+ //   uses "closebutton" images
+ MARGIN_TOP                      8
+ MARGIN_BOTTOM                   8
+ MARGIN_LEFT                     16
+ MARGIN_RIGHT                    16
+ MARGIN_COLUMNS                  4
+ MARGIN_ROWS                     4
+ HEIGHT_DIALOGBORDER             1
+ // font sizes (used for everything)
+ FONTSIZE_NORMAL                 12
+ HEIGHT_NORMAL                   1.5
+ FONTSIZE_TITLE                  16
+ HEIGHT_TITLE                    1.5
+ HEIGHT_ZOOMEDTITLE              -1
+ // general 
+ //   uses "background" images
+ //   uses "background_ingame" images
+ ALIGN_BACKGROUND                h5h5
+ ALIGN_BACKGROUND_INGAME         h5
+ ALPHA_BACKGROUND_INGAME         1
+ ALPHA_DISABLED                  0.2
+ ALPHA_BEHIND                    0.5
+ ALPHA_TEXT                      0.7
+ // mouse
+ //   uses "cursor" images
+ SIZE_CURSOR                     '32 32 0'
+ OFFSET_CURSOR                   '0 0 0'
+ ALPHA_CURSOR_INTRO              0
+ // nexposee positions of windows (they are the scale transformation
+ // centers, NOT the actual positions of the windows!)
+ POSITION_DIALOG_MULTIPLAYER     '0.8 0.4 0'
+ POSITION_DIALOG_SINGLEPLAYER    '0.2 0.4 0'
+ POSITION_DIALOG_SETTINGS        '0.5 0.95 0'
+ POSITION_DIALOG_CREDITS         '-0.05 1.2 0'
+ POSITION_DIALOG_QUIT            '1.05 1.2 0'
+ // tooltips
+ //   uses "tooltip" images
+ MARGIN_TOOLTIP                  '8 8 0'
+ BORDER_TOOLTIP                  '16 16 0'
+ FONTSIZE_TOOLTIP                12
+ ALPHA_TOOLTIP                   0.7
+ WIDTH_TOOLTIP                   0.3
+ AVOID_TOOLTIP                   '8 8 0'
+ //------------------------------------------------------------------------------
+ // Colors (e.g. font colors, field colors)
+ //------------------------------------------------------------------------------
+ // item: campaign
+ ALPHA_CAMPAIGN_SELECTABLE       0.8
+ COLOR_CAMPAIGN_SELECTABLE       '1 1 1'
+ ALPHA_CAMPAIGN_CURRENT          1
+ COLOR_CAMPAIGN_CURRENT          '1 1 1'
+ ALPHA_CAMPAIGN_FUTURE           0.2
+ COLOR_CAMPAIGN_FUTURE           '1 1 1'
+ ALPHA_CAMPAIGN_DESCRIPTION      0.7
+ // item: credits list
+ COLOR_CREDITS_TITLE             '0.875 0.375 0'
+ ALPHA_CREDITS_TITLE             1
+ COLOR_CREDITS_FUNCTION          '0 0.1875 0.4375'
+ ALPHA_CREDITS_FUNCTION          0.5
+ COLOR_CREDITS_PERSON            '0 0.375 0.75'
+ ALPHA_CREDITS_PERSON            0.875
+ ROWS_CREDITS                    20
+ WIDTH_CREDITS                   0.5
+ // item: cvar list
+ ALPHA_CVARLIST_SAVED            1
+ ALPHA_CVARLIST_TEMPORARY        0.7    
+ COLOR_CVARLIST_CHANGED          '0 0.375 0.75' 
+ COLOR_CVARLIST_REVERTBUTTON     '1 0 0'
+ COLOR_CVARLIST_UNCHANGED        '1 1 1'
+ // item: list box
+ COLOR_LISTBOX_SELECTED          '0.875 0.375 0'
+ ALPHA_LISTBOX_SELECTED          1
+ COLOR_LISTBOX_WAITING           '1 1 1'
+ ALPHA_LISTBOX_WAITING           0.5
+ // item: map list
+ COLOR_MAPLIST_TITLE             '1 1 1'
+ COLOR_MAPLIST_AUTHOR            '0 0.375 0.75'
+ COLOR_MAPLIST_INCLUDEDBG        '0 0.1875 0.4375'
+ ALPHA_MAPLIST_INCLUDEDFG        1
+ ALPHA_MAPLIST_INCLUDEDBG        0.375
+ ALPHA_MAPLIST_NOTINCLUDEDFG     0.25
+ // item: nexposee
+ ALPHAS_MAINMENU                 '0.8 0.9 1'
+ // item: player model
+ COLOR_MODELTITLE                '1 1 1'
+ ALPHA_MODELTITLE                1
+ // item: server info
+ COLOR_SERVERINFO_NAME           '1 1 1'
+ COLOR_SERVERINFO_IP             '0.875 0.375 0'
+ // item: server list
+ ALPHA_SERVERLIST_FULL           0.4
+ ALPHA_SERVERLIST_EMPTY          0.7
+ COLOR_SERVERLIST_LOWPING        '0 1 0'
+ COLOR_SERVERLIST_MEDPING        '1 0.75 0'
+ COLOR_SERVERLIST_HIGHPING       '1 0 0'
+ ALPHA_SERVERLIST_HIGHPING       0.4
+ ALPHA_SERVERLIST_FAVORITE       0.8
+ COLOR_SERVERLIST_FAVORITE       '1 1 1'
+ // item: skin list
+ COLOR_SKINLIST_TITLE            '1 1 1'
+ COLOR_SKINLIST_AUTHOR           '0 0.375 0.75'
+ //------------------------------------------------------------------------------
+ // Images (colors multiplied to images)
+ //------------------------------------------------------------------------------
+ // item: button
+ //   uses "button" images
+ //   uses "buttongray" images
+ //   uses "bigbutton" images
+ //   uses "bigbuttongray" images
+ COLOR_BUTTON_N                  '1 1 1'
+ COLOR_BUTTON_C                  '1 1 1'
+ COLOR_BUTTON_F                  '1 1 1'
+ COLOR_BUTTON_D                  '1 1 1'
+ // item: checkbox
+ //   uses "checkbox" images
+ COLOR_CHECKBOX_N                '1 1 1'
+ COLOR_CHECKBOX_C                '0.5 0.75 1'
+ COLOR_CHECKBOX_F                '0.5 0.75 1'
+ COLOR_CHECKBOX_D                '1 1 1'
+ // item: crosshair button
+ //   uses "crosshairbutton" images
+ // dialog background colors
+ //   uses "border" images
+ COLOR_DIALOG_MULTIPLAYER        '1 1 1'
+ COLOR_DIALOG_SETTINGS           '1 1 1'
+ COLOR_DIALOG_TEAMSELECT         '1 1 1'
+ COLOR_DIALOG_SANDBOXTOOLS       '1 1 1'
+ COLOR_DIALOG_QUIT               '1 1 1'
+ COLOR_DIALOG_ADVANCED           '1 1 1'
+ COLOR_DIALOG_MUTATORS           '1 1 1'
+ COLOR_DIALOG_MAPINFO            '1 1 1'
+ COLOR_DIALOG_USERBIND           '1 1 1'
+ COLOR_DIALOG_SINGLEPLAYER       '1 1 1'
+ COLOR_DIALOG_CREDITS            '1 1 1'
+ COLOR_DIALOG_WEAPONS            '1 1 1'
+ COLOR_DIALOG_WAYPOINTS          '1 1 1'
+ COLOR_DIALOG_SERVERINFO         '1 1 1'
+ COLOR_DIALOG_CVARS              '1 0 0'
+ // item: input box
+ //   uses "inputbox" images
+ COLOR_INPUTBOX_N                '1 1 1'
+ COLOR_INPUTBOX_F                '1 1 1'
+ MARGIN_INPUTBOX_CHARS           1
++OFFSET_CLEARBUTTON              -0.5
+ // item: key grabber
+ COLOR_KEYGRABBER_TITLES         '1 1 1'
+ ALPHA_KEYGRABBER_TITLES         1
+ COLOR_KEYGRABBER_KEYS           '1 1 1'
+ ALPHA_KEYGRABBER_KEYS           0.7
+ // item: player color button
+ //   uses "colorbutton" images
+ //   uses "color" images
+ // item: player name editor
+ //   uses "charmap" images
+ //   uses "charmapbutton" images
+ // item: radio button
+ //   uses "radiobutton" images
+ COLOR_RADIOBUTTON_N             '1 1 1'
+ COLOR_RADIOBUTTON_C             '1 1 1'
+ COLOR_RADIOBUTTON_F             '1 1 1'
+ COLOR_RADIOBUTTON_D             '1 1 1'
+ // item: scrollbar
+ //   uses "scrollbar" images
+ COLOR_SCROLLBAR_N               '1 1 1'
+ COLOR_SCROLLBAR_C               '0.5 0.75 1'
+ COLOR_SCROLLBAR_F               '0.5 0.75 1'
+ COLOR_SCROLLBAR_S               '0.25 0.25 0.25'
+ WIDTH_SCROLLBAR                 16
+ // item: slider
+ //   uses "slider" images
+ COLOR_SLIDER_N                  '1 1 1'
+ COLOR_SLIDER_C                  '0.5 0.75 1'
+ COLOR_SLIDER_F                  '0.5 0.75 1'
+ COLOR_SLIDER_D                  '1 1 1'
+ COLOR_SLIDER_S                  '0.25 0.25 0.25'
+ WIDTH_SLIDERTEXT                0.333333333333
+ TOLERANCE_SLIDER                '0.2 2 0'
index 217e8c9561a8a773b56708613e4400b1a8e60af5,5afcb09cfe3751cd5efedde9758be73cd512e864..d5b7a47916a8782d284ed6f99e1abcf10f5c296a
@@@ -21,6 -21,7 +21,7 @@@ AVOID_TOOLTIP                   '8 8 0
  COLOR_DIALOG_MULTIPLAYER        '1 1 1'
  COLOR_DIALOG_SETTINGS           '1 1 1'
  COLOR_DIALOG_TEAMSELECT         '1 1 1'
+ COLOR_DIALOG_SANDBOXTOOLS       '1 1 1'
  COLOR_DIALOG_QUIT               '1 0 0'
  COLOR_DIALOG_ADVANCED           '1 1 1'
  COLOR_DIALOG_MUTATORS           '1 1 1'
@@@ -112,8 -113,8 +113,8 @@@ COLOR_CVARLIST_UNCHANGED        '1 1 1
  //   uses "closebutton" images
  MARGIN_TOP                      8
  MARGIN_BOTTOM                   8
- MARGIN_LEFT                     8
- MARGIN_RIGHT                    8
+ MARGIN_LEFT                     16
+ MARGIN_RIGHT                    16
  MARGIN_COLUMNS                  4
  MARGIN_ROWS                     4
  HEIGHT_DIALOGBORDER             1
  COLOR_INPUTBOX_N                '1 1 1'
  COLOR_INPUTBOX_F                '1 1 1'
  MARGIN_INPUTBOX_CHARS           1
 +OFFSET_CLEARBUTTON              0
  
  // item: key grabber
  COLOR_KEYGRABBER_TITLES         '1 1 1'
index 2cb85a7a0fd4627b56d54fd235d183746bc3f350,e8cfba3689a7bcca7ed0fe1fa1eaffa4549dd904..948b2311e8d95ca381aeac37823b021e38f1558c
@@@ -55,6 -55,7 +55,7 @@@ SKINBEGI
        SKINVECTOR(COLOR_DIALOG_MULTIPLAYER, '0.7 0.7 1');
        SKINVECTOR(COLOR_DIALOG_SETTINGS, '0.7 0.7 1');
        SKINVECTOR(COLOR_DIALOG_TEAMSELECT, '1 1 1');
+       SKINVECTOR(COLOR_DIALOG_SANDBOXTOOLS, '1 1 1');
        SKINVECTOR(COLOR_DIALOG_QUIT, '1 0 0');
        SKINVECTOR(COLOR_DIALOG_ADVANCED, '0.7 0.7 1');
        SKINVECTOR(COLOR_DIALOG_MUTATORS, '0.7 0.7 1');
        SKINSTRING(GFX_INPUTBOX, "inputbox");
        SKINVECTOR(COLOR_INPUTBOX_N, '1 1 1');
        SKINVECTOR(COLOR_INPUTBOX_F, '1 1 1');
 +      SKINSTRING(GFX_CLEARBUTTON, "clearbutton");
 +      SKINFLOAT(OFFSET_CLEARBUTTON, 0);
        SKINFLOAT(MARGIN_INPUTBOX_CHARS, 1);
  
        // item: key grabber
index 5b20089a69ee065c50af4d78b045d42bc1bf91be,99f5a179b5ca6ab2bf6711bf20ea1a705c1ff291..bfcd1f2567ad49a9714a4328b342e2c15aa26416
@@@ -20,7 -20,9 +20,7 @@@ entity makeXonoticDemoBrowserTab(
  }
  void XonoticDemoBrowserTab_fill(entity me)
  {
 -      entity e;
 -      entity btn;
 -      entity dlist;
 +      entity e, dlist;
  
        me.TR(me);
                me.TD(me, 1, me.columns, e = makeXonoticCheckBox(0, "cl_autodemo", _("Record demos while playing")));
        dlist = makeXonoticDemoList();
        me.TR(me);
                me.TD(me, 1, 0.5, e = makeXonoticTextLabel(0, _("Filter:")));
 -              me.TD(me, 1, 0.5, btn = makeXonoticButton(_("Clear"), '0 0 0'));
 -                      btn.onClick = InputBox_Clear_Click;
 -              me.TD(me, 1, me.columns - 1, e = makeXonoticInputBox(0, string_null));
 +              me.TD(me, 1, me.columns - 0.5, e = makeXonoticInputBox(0, string_null));
                        e.onChange = DemoList_Filter_Change;
                        e.onChangeEntity = dlist;
 -                      btn.onClickEntity = e;
                        dlist.controlledTextbox = e;
        me.TR(me);
                me.TD(me, me.rows - 4, me.columns, dlist);
@@@ -38,7 -43,7 +38,7 @@@
                me.TD(me, 1, me.columns / 2, e = makeXonoticButton(_("Timedemo"), '0 0 0'));
                        e.onClick = TimeDemo_Click;
                        e.onClickEntity = dlist;
-               me.TD(me, 1, me.columns / 2, e = makeXonoticButton(_("Play"), '0 0 0'));
+               me.TD(me, 1, me.columns / 2, e = makeXonoticButton(ZCTX(_("DEMO^Play")), '0 0 0'));
                        e.onClick = StartDemo_Click;
                        e.onClickEntity = dlist;
  }
index dc0ddf729e996204b3b9f4cc18b8118d76ea6dc1,ee451744fb8899942380f76248d7ff8bfa638f51..02d3b410209a0af2bdf371309a45ea7325f57906
@@@ -20,15 -20,18 +20,15 @@@ entity makeXonoticServerListTab(
  }
  void XonoticServerListTab_fill(entity me)
  {
 -      entity e, slist, btn;
 +      entity e, slist;
  
        slist  = makeXonoticServerList();
  
        me.TR(me);
                me.TD(me, 1, 0.4, e = makeXonoticTextLabel(0, _("Filter:")));
 -              me.TD(me, 1, 0.6, btn = makeXonoticButton(_("Clear"), '0 0 0'));
 -                      btn.onClick = InputBox_Clear_Click;
 -              me.TD(me, 1, me.columns - 0.6 * 4 - 0.4, e = makeXonoticInputBox(0, string_null));
 +              me.TD(me, 1, me.columns - 0.6 * 3 - 0.4, e = makeXonoticInputBox(0, string_null));
                        e.onChange = ServerList_Filter_Change;
                        e.onChangeEntity = slist;
 -                      btn.onClickEntity = e;
                        slist.controlledTextbox = e;
                me.TD(me, 1, 0.6, e = makeXonoticCheckBox(0, "menu_slist_showempty", ZCTX(_("SRVS^Empty"))));
                        slist.filterShowEmpty = e.checked;
@@@ -54,6 -57,8 +54,8 @@@
                me.TD(me, 1, 2.9, e = makeXonoticInputBox(0, string_null));
                        e.onEnter = ServerList_Connect_Click;
                        e.onEnterEntity = slist;
+                       e.onChange = ServerList_Update_favoriteButton;
+                       e.onChangeEntity = slist;
                        slist.ipAddressBox = e;
                me.TD(me, 1, 1.5, e = makeXonoticButton("", '0 0 0'));
                        e.onClick = ServerList_Favorite_Click;
index 89df497fa11ead3fad817c2283a581ca1c000ec2,6365081658c2553d69f566d710c9bbe8e3562e56..a57dd6ea40a113a2a944a47bded1e7861daa0bfb
@@@ -48,7 -48,6 +48,7 @@@ void XonoticPlayerSettingsTab_fill(enti
                        box.forbiddenCharacters = "\r\n\\\"$"; // don't care, isn't getting saved
                        box.maxLength = -127; // negative means encoded length in bytes
                        box.saveImmediately = 1;
 +                      box.enableClearButton = 0;
                        label.textEntity = box;
        me.TR(me);
                me.TD(me, 5, 1, e = makeXonoticColorpicker(box));
                me.TD(me, 1, 0.3, e = makeXonoticButton("<<", '0 0 0'));
                        e.onClick = PlayerModelSelector_Prev_Click;
                        e.onClickEntity = pms;
-               me.TD(me, me.rows - me.currentRow - 1, 1.8, pms);
+               me.TD(me, me.rows - (me.currentRow + 3), 1.8, pms);
                me.TD(me, 1, 0.3, e = makeXonoticButton(">>", '0 0 0'));
                        e.onClick = PlayerModelSelector_Next_Click;
                        e.onClickEntity = pms;
        me.TR(me);
                r = me.currentRow;
-               m = me.rows - r - 2;
+               m = me.rows - (r + 4);
                n = 16 - !cvar("developer");
                m = m / (n - 1);
                for(i = 0; i < n; ++i)
                        me.gotoRC(me, r + i * m, 0.4);
                        me.TDNoMargin(me, m, 0.2, e = makeXonoticColorButton(2, 1, i), '0 1 0');
                }
+       me.gotoRC(me, me.rows - 3, 0);
+               me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_forceplayermodels", _("Force player models to mine")));
+       me.TR(me);
+               me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_forceplayercolors", _("Force player colors to mine")));
  
        me.gotoRC(me, 0, 3.5); me.setFirstColumn(me, me.currentColumn);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Field of view:")));
                me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "crosshair_per_weapon", _("Per weapon")));
        me.TR(me);
                me.TDempty(me, 0.2);
-               for(i = 1; i <= 10; ++i) {
-                       me.TDNoMargin(me, 1, 2 / 10, e = makeXonoticCrosshairButton(3, i), '1 1 0');
+               for(i = 1; i <= 14; ++i) {
+                       me.TDNoMargin(me, 1, 2 / 14, e = makeXonoticCrosshairButton(3, i), '1 1 0');
                        setDependent(e, "crosshair_per_weapon", 0, 0);
                }
                // show a larger preview of the selected crosshair
                me.TDempty(me, 0.2);
-               me.TDNoMargin(me, 2, 2 / 5, e = makeXonoticCrosshairButton(4, -1), '1 1 0'); // crosshair -1 makes this a preview
+               me.TDNoMargin(me, 2, 2 / 5, e = makeXonoticCrosshairButton(7, -1), '1 1 0'); // crosshair -1 makes this a preview
                setDependent(e, "crosshair_per_weapon", 0, 0);
        me.TR(me);
                me.TDempty(me, 0.2);
-               for(i = 11; i <= 20; ++i) {
-                       me.TDNoMargin(me, 1, 2 / 10, e = makeXonoticCrosshairButton(3, i), '1 1 0');
+               for(i = 15; i <= 28; ++i) {
+                       me.TDNoMargin(me, 1, 2 / 14, e = makeXonoticCrosshairButton(3, i), '1 1 0');
                        setDependent(e, "crosshair_per_weapon", 0, 0);
                }
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Crosshair size:")));
-               me.TD(me, 1, 1.8, e = makeXonoticSlider(0.10, 1.5, 0.05, "crosshair_size"));
+               me.TD(me, 1, 1.8, e = makeXonoticSlider(0.1, 1.0, 0.01, "crosshair_size"));
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Crosshair alpha:")));
                me.TD(me, 1, 1.8, e = makeXonoticSlider(0, 1, 0.1, "crosshair_alpha"));
        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")));
-               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, 1, e = makeXonoticTextLabel(0, _("Crosshair color:")));
+               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"));
-               setDependentAND(e, "crosshair_color_per_weapon", 0, 0, "crosshair_color_by_health", 0, 0);
+               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);
                me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "crosshair_dot", _("Enable center dot")));
                me.TD(me, 1, 2.2, e = makeXonoticButton(_("Waypoints setup..."), '0 0 0'));
                        e.onClick = DialogOpenButton_Click;
                        e.onClickEntity = main.waypointDialog;
-               me.TDempty(me, 0.5);
        me.TR(me);
                me.TDempty(me, 0.4);
                me.TD(me, 1, 2.2, e = makeXonoticButton(_("Enter HUD editor"), '0 0 0'));
                        e.onClick = HUDSetup_Join_Click;
                        e.onClickEntity = me;
-               me.TDempty(me, 0.5);
-       me.TR(me);
-       me.TR(me);
        #ifdef ALLOW_FORCEMODELS
+       me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Force models:")));
-               me.TD(me, 1, 2/3, e = makeXonoticRadioButton(6, string_null, string_null, ZCTX(_("MDL^None")));
+               me.TD(me, 1, 2/3, e = makeXonoticRadioButton(6, string_null, string_null, ZCTX(_("MDL^None"))));
                me.TD(me, 1, 2/3, e = makeXonoticRadioButton(6, "cl_forceplayermodelsfromxonotic", string_null, ZCTX(_("MDL^Custom"))));
                me.TD(me, 1, 2/3, e = makeXonoticRadioButton(6, "cl_forceplayermodels", string_null, ZCTX(_("MDL^All"))));
        #endif
+       me.TR(me);
                me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_gentle", _("Disable gore effects")));
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Gibs:")));
                me.TD(me, 1, 2, e = makeXonoticSlider(0, 1, 0.05, "hud_damage"));
  
        me.gotoRC(me, me.rows - 1, 0);
-               me.TD(me, 1, me.columns, makeXonoticCommandButton(_("Apply immediately"), '0 0 0', "color -1 -1;name \"$_cl_name\";cl_cmd sendcvar cl_weaponpriority;sendcvar cl_zoomfactor;sendcvar cl_zoomspeed;sendcvar cl_autoswitch;sendcvar cl_shownames;sendcvar cl_forceplayermodelsfromxonotic;sendcvar cl_forceplayermodels;playermodel $_cl_playermodel;playerskin $_cl_playerskin", COMMANDBUTTON_APPLY));
+               me.TD(me, 1, me.columns, makeXonoticCommandButton(_("Apply immediately"), '0 0 0', "color -1 -1;name \"$_cl_name\";cl_cmd sendcvar cl_weaponpriority;sendcvar cl_zoomfactor;sendcvar cl_zoomspeed;sendcvar cl_autoswitch;sendcvar cl_forceplayermodelsfromxonotic;sendcvar cl_forceplayermodels;playermodel $_cl_playermodel;playerskin $_cl_playerskin", COMMANDBUTTON_APPLY));
  }
  void HUDSetup_Join_Click(entity me, entity btn)
  {
index 7b9e7f810c7eb9fd47e8d283ebba7493b05ca570,9f489a84506731fbcf2674ed47f453ef86bd6153..886c9b74a5f33d98006b267485edc2bc54651cca
@@@ -24,6 -24,10 +24,10 @@@ void XonoticNetworkSettingsTab_fill(ent
  
        me.TR(me);
                me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_movement", _("Client-side movement prediction")));
+       me.TR(me);
+               me.TDempty(me, 0.2);
+               me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "cl_movement_errorcompensation", _("Movement error compensation")));
+                       setDependent(e, "cl_movement", 1, 1);
        me.TR(me);
                //me.TD(me, 1, 3, e = makeXonoticCheckBox(1, "cl_nolerp", _("Network update smoothing")));
        me.TR(me);
@@@ -56,6 -60,5 +60,6 @@@
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Client UDP port:")));
                me.TD(me, 1, 0.64, e = makeXonoticInputBox(0, "cl_port"));
 +                      e.enableClearButton = 0;
  }
  #endif