// 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_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_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'
--- /dev/null
+ 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'
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'
// 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'
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
}
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);
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;
}
}
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;
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;
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)
{
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);
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