cl_particles_quality 1.0
cl_damageeffect 1
cl_spawn_point_particles 1
-cl_playerdetailreduction 4
+cl_playerdetailreduction 1
gl_flashblend 0
gl_picmip -1
gl_texturecompression_2d 0
r_shadow_usenormalmap 1
r_showsurfaces 0
r_sky 1
-r_subdivisions_tolerance 3
+r_subdivisions_tolerance 1
r_texture_dds_load 1
r_water 1
r_water_resolutionmultiplier 0.25
cl_particles_quality 0.4
cl_damageeffect 0
cl_spawn_point_particles 0
-cl_playerdetailreduction 4
+cl_playerdetailreduction 8
gl_flashblend 1
gl_picmip 1
gl_texturecompression_2d 1
cl_particles_quality 1.0
cl_damageeffect 1
cl_spawn_point_particles 1
-cl_playerdetailreduction 4
+cl_playerdetailreduction 2
gl_flashblend 0
gl_picmip 0
gl_texturecompression_2d 0
r_shadow_usenormalmap 1
r_showsurfaces 0
r_sky 1
-r_subdivisions_tolerance 3
+r_subdivisions_tolerance 2
r_texture_dds_load 1
r_water 0
r_water_resolutionmultiplier 0.25
cl_particles_quality 0.4
cl_damageeffect 0
cl_spawn_point_particles 0
-cl_playerdetailreduction 4
+cl_playerdetailreduction 1337
gl_flashblend 1
gl_picmip 1337
gl_texturecompression_2d 1
r_shadow_usenormalmap 0
r_showsurfaces 3
r_sky 0
-r_subdivisions_tolerance 16
+r_subdivisions_tolerance 1337
r_texture_dds_load 1
r_water 0
r_water_resolutionmultiplier 0.25
r_shadow_usenormalmap 1
r_showsurfaces 0
r_sky 1
-r_subdivisions_tolerance 1
+r_subdivisions_tolerance 0.01
r_texture_dds_load 0
r_water 1
r_water_resolutionmultiplier 1
r_shadow_usenormalmap 1
r_showsurfaces 0
r_sky 1
-r_subdivisions_tolerance 2
+r_subdivisions_tolerance 0.1
r_texture_dds_load 0
r_water 1
r_water_resolutionmultiplier 0.5
CLASS(XonoticDamageTextSettings, XonoticTab)
REGISTER_SETTINGS(damagetext, NEW(XonoticDamageTextSettings));
- ATTRIB(XonoticDamageTextSettings, title, string, _("Damage text"));
+ ATTRIB(XonoticDamageTextSettings, title, string, _("Damage"));
+ ATTRIB(XonoticDamageTextSettings, titleTooltip, string, _("Adjust damage numbers, effects, gibs and harsh language"));
ATTRIB(XonoticDamageTextSettings, intendedWidth, float, 0.9);
ATTRIB(XonoticDamageTextSettings, rows, float, 15.5);
ATTRIB(XonoticDamageTextSettings, columns, float, 5);
this.TR(this);
this.TD(this, 1, 3, e = makeXonoticCheckBox(0, "cl_damagetext_friendlyfire", _("Draw damage numbers for friendly fire")));
setDependent(e, "cl_damagetext", 1, 1);
+
+ this.TR(this);
+ this.TR(this);
+ this.TD(this, 1, 1, e = makeXonoticTextLabel(0, _("Damage to models:")));
+ this.TD(this, 1, 2, e = makeXonoticTextSlider("cl_damageeffect"));
+ e.addValue(e, ZCTX(_("DMGFX^Disabled")), "0");
+ e.addValue(e, _("Skeletal"), "1");
+ e.addValue(e, ZCTX(_("DMGFX^All")), "2");
+ e.configureXonoticTextSliderValues(e);
+ this.TR(this);
+ this.TR(this);
+ this.TD(this, 1, 3, e = makeXonoticCheckBox_T(0, "cl_gentle", _("Disable all gibs, blood and harsh language"),
+ _("Replace blood and gibs with content that does not have any gore effects")));
+ e.sendCvars = true;
+ this.TR(this);
+ this.TD(this, 1, 3, e = makeXonoticCheckBox_T(0, "cl_gentle_messages", _("Disable harsh language in centreprints and frag messages"),
+ _("Replace blood and gibs with content that does not have any gore effects")));
+ e.sendCvars = true;
+ setDependent(e, "cl_gentle", 0, 0);
+ this.TR(this);
+ this.TD(this, 1, 1, e = makeXonoticTextLabel(0, _("Blood effect:")));
+ setDependent(e, "cl_gentle", 0, 0);
+ this.TD(this, 1, 2, e = makeXonoticTextSlider("cl_gentle_damage"));
+ e.addValue(e, _("Blood"), "0");
+ e.addValue(e, _("White flash"), "1");
+ e.addValue(e, _("Colorful flash"), "2");
+ e.configureXonoticTextSliderValues(e);
+ e.sendCvars = true;
+ setDependent(e, "cl_gentle", 0, 0);
+ this.TR(this);
+ this.TD(this, 1, 1, e = makeXonoticTextLabel(0, _("Gib effect:")));
+ setDependent(e, "cl_gentle", 0, 0);
+ this.TD(this, 1, 2, e = makeXonoticTextSlider("cl_gentle_gibs"));
+ e.addValue(e, _("Gibs"), "0");
+ e.addValue(e, _("White smoke"), "1");
+ e.addValue(e, _("Colorful clouds"), "2");
+ e.configureXonoticTextSliderValues(e);
+ e.sendCvars = true;
+ setDependent(e, "cl_gentle", 0, 0);
+ this.TR(this);
+ this.TD(this, 1, 1, e = makeXonoticTextLabel(0, _("Gib quantity:")));
+ setDependent(e, "cl_gentle", 0, 0);
+ this.TD(this, 1, 2, e = makeXonoticTextSlider("cl_nogibs"));
+ e.addValue(e, ZCTX(_("GIBS^None")), "1");
+ e.addValue(e, ZCTX(_("GIBS^Few")), "0.75");
+ e.addValue(e, ZCTX(_("GIBS^Many")), "0.5");
+ e.addValue(e, ZCTX(_("GIBS^Lots")), "0");
+ e.configureXonoticTextSliderValues(e);
+ e.sendCvars = true;
+ setDependent(e, "cl_gentle", 0, 0);
}
ENDCLASS(XonoticDamageTextSettings)
if(!warpzone_warpzones_exist)
{
cvar_settemp("r_water", "1"); // HACK for DarkPlaces: always enable reflections when a map has warpzones
- cvar_settemp("r_water_resolutionmultiplier", "1"); // HACK for DarkPlaces: enforce full quality so entities can be seen clearly through warpzones
+ if(cvar_type("vid_gl20") & CVAR_TYPEFLAG_ENGINE)
+ // TODO: remove this when GL 2 renderer is gone (no r_viewscale > 1 in GL 2)
+ cvar_settemp("r_water_resolutionmultiplier", "1");
+ else
+ {
+ // HACK for DarkPlaces: enforce full quality so entities can be seen clearly through warpzones
+ if(cvar("r_water_resolutionmultiplier") * cvar("r_viewscale") < 1)
+ cvar_settemp("r_water_resolutionmultiplier", ftos(1 / cvar("r_viewscale")));
+ }
}
warpzone_warpzones_exist = 1;
if (!this.enemy)
if(!warpzone_cameras_exist)
{
cvar_settemp("r_water", "1"); // HACK for DarkPlaces: always enable reflections when a map has cameras
- cvar_settemp("r_water_resolutionmultiplier", "1"); // HACK for DarkPlaces: enforce full quality so entities can be seen clearly through warpzones
+ if(cvar_type("vid_gl20") & CVAR_TYPEFLAG_ENGINE)
+ // TODO: remove this when GL 2 renderer is gone (no r_viewscale > 1 in GL 2)
+ cvar_settemp("r_water_resolutionmultiplier", "1");
+ else
+ {
+ // HACK for DarkPlaces: enforce full quality so entities can be seen clearly through cameras
+ if(cvar("r_water_resolutionmultiplier") * cvar("r_viewscale") < 1)
+ cvar_settemp("r_water_resolutionmultiplier", ftos(1 / cvar("r_viewscale")));
+ }
}
warpzone_cameras_exist = 1;
this.classname = "func_warpzone_camera";
me.TD(me, 1, 2, mc.makeTabButton(mc, _("Effects"), makeXonoticEffectsSettingsTab()));
me.TD(me, 1, 2, mc.makeTabButton(mc, _("Audio"), makeXonoticAudioSettingsTab()));
me.TR(me);
- me.TD(me, 1, 1.5, mc.makeTabButton(mc, _("Game"), NEW(XonoticGameSettingsTab)));
- me.TD(me, 1, 1.5, mc.makeTabButton(mc, _("Input"), makeXonoticInputSettingsTab()));
- me.TD(me, 1, 1.5, mc.makeTabButton(mc, _("User"), makeXonoticUserSettingsTab()));
- me.TD(me, 1, 1.5, mc.makeTabButton(mc, _("Misc"), makeXonoticMiscSettingsTab()));
+ me.TD(me, 1, 1.5, mc.makeTabButton(mc, _("Game"), NEW(XonoticGameSettingsTab)));
+ me.TD(me, 1, 1.5, mc.makeTabButton(mc, _("Input"), makeXonoticInputSettingsTab()));
+ me.TD(me, 1, 1.5, mc.makeTabButton(mc, _("User Interface"), makeXonoticUserSettingsTab()));
+ me.TD(me, 1, 1.5, mc.makeTabButton(mc, _("Misc"), makeXonoticMiscSettingsTab()));
me.gotoRC(me, 2.5, 0);
me.TD(me, me.rows - 2.5, me.columns, mc);
}
_("Enable spatialization (blend the right and left channel slightly to decrease stereo separation a bit for headphones)")));
setDependent(e, "snd_channels", 1.5, 0.5);
me.TR(me);
- me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "cl_hitsound", _("Hit indication sound"),
- _("Play a hit indicator sound when your shot hits an enemy")));
- e.sendCvars = true;
me.TR(me);
me.TD(me, 1, 3, makeXonoticCheckBox(0, "con_chatsound", _("Chat message sound")));
me.TR(me);
_("Play sounds when hovering over menu items too")));
setDependent(e2, "menu_sounds", 1, 2);
me.TR(me);
+ me.TR(me);
+ me.TD(me, 1, 1, makeXonoticTextLabel(0, _("Damage sound pitch:")));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_hitsound"));
+ e.addValue(e, _("Disabled"), "0");
+ e.addValue(e, _("Fixed pitch"), "1");
+ e.addValue(e, _("Low = More"), "2");
+ e.addValue(e, _("High = More"), "3");
+ e.configureXonoticTextSliderValues(e);
+ e.sendCvars = true;
me.TR(me);
me.TD(me, 1, 1, makeXonoticTextLabel(0, _("Time announcer:")));
me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_announcer_maptime"));
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Geometry detail:")));
me.TD(me, 1, 2, e = makeXonoticTextSlider_T("r_subdivisions_tolerance",
_("Change the smoothness of the curves on the map")));
- e.addValue(e, ZCTX(_("DET^Lowest")), "16");
+ if(cvar("developer") > 0)
+ e.addValue(e, ZCTX(_("DET^Leet")), "1337");
e.addValue(e, ZCTX(_("DET^Low")), "8");
- e.addValue(e, ZCTX(_("DET^Normal")), "4");
- e.addValue(e, ZCTX(_("DET^Good")), "3");
- e.addValue(e, ZCTX(_("DET^Best")), "2");
- e.addValue(e, ZCTX(_("DET^Insane")), "1");
+ e.addValue(e, ZCTX(_("DET^Medium")), "4");
+ e.addValue(e, ZCTX(_("DET^Normal")), "2");
+ e.addValue(e, ZCTX(_("DET^High")), "1");
+ e.addValue(e, ZCTX(_("DET^Ultra")), "0.1");
+ if(cvar("developer") > 0)
+ e.addValue(e, ZCTX(_("DET^Ultimate")), "0.01");
e.configureXonoticTextSliderValues(e);
e.applyButton = effectsApplyButton;
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Player detail:")));
me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_playerdetailreduction"));
- e.addValue(e, ZCTX(_("PDET^Low")), "4");
- e.addValue(e, ZCTX(_("PDET^Medium")), "3");
+ if(cvar("developer") > 0)
+ e.addValue(e, ZCTX(_("PDET^Leet")), "1337");
+ e.addValue(e, ZCTX(_("PDET^Low")), "8");
+ e.addValue(e, ZCTX(_("PDET^Medium")), "4");
e.addValue(e, ZCTX(_("PDET^Normal")), "2");
- e.addValue(e, ZCTX(_("PDET^Good")), "1");
- e.addValue(e, ZCTX(_("PDET^Best")), "0");
+ e.addValue(e, ZCTX(_("PDET^High")), "1");
+ e.addValue(e, ZCTX(_("PDET^Ultra")), "0");
e.configureXonoticTextSliderValues(e);
- e.applyButton = effectsApplyButton;
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Texture resolution:")));
setDependent(e, "r_showsurfaces", 0, 0);
me.TD(me, 1, 2, e = makeXonoticPicmipSlider());
- if(cvar("developer") > 0)
- e.addValue(e, ZCTX(_("RES^Leet")), "1337");
- e.addValue(e, ZCTX(_("RES^Lowest")), "3");
- e.addValue(e, ZCTX(_("RES^Very low")), "2");
+ e.addValue(e, ZCTX(_("RES^Leet")), "1337");
e.addValue(e, ZCTX(_("RES^Low")), "1");
e.addValue(e, ZCTX(_("RES^Normal")), "0");
- e.addValue(e, ZCTX(_("RES^Good")), "-1");
- e.addValue(e, ZCTX(_("RES^Best")), "-2");
+ e.addValue(e, ZCTX(_("RES^High")), "-1");
e.configureXonoticTextSliderValues(e);
setDependent(e, "r_showsurfaces", 0, 0);
e.applyButton = effectsApplyButton;
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 1, e = makeXonoticCheckBoxEx_T(1, 0, "r_sky", _("Show sky"), _("Disable sky for performance and visibility")));
- if(cvar("developer") > 0)
- {
- me.TD(me, 1, 1, e = makeXonoticCheckBoxEx_T(3, 0, "r_showsurfaces", _("Show surfaces"),
- _("Disable textures completely for very slow hardware. This gives a huge performance boost, but looks very ugly.")));
- }
+ if(cvar("developer") > 0)
+ me.TD(me, 1, 1, e = makeXonoticCheckBoxEx(3, 0, "r_showsurfaces", _("Show surfaces")));
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticCheckBox_T(1, "mod_q3bsp_nolightmaps", _("Use lightmaps"),
_("Use high resolution lightmaps, which will look pretty but use up some extra video memory")));
e.addValue(e, _("Sharp"), "1");
e.configureXonoticTextSliderValues(e);
setDependentAND(e, "vid_gl20", 1, 1, "r_water", 1, 1);
+ me.TR(me);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "cl_decals", _("Decals"),
_("Enable decals (bullet holes and blood)")));
me.TD(me, 1, 2, e = makeXonoticSlider_T(1, 20, 1, "cl_decals_fadetime",
_("Time in seconds before decals fade away")));
setDependent(e, "cl_decals", 1, 1);
- me.TR(me);
- me.TDempty(me, 0.2);
- me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Damage effects:")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_damageeffect"));
- e.addValue(e, ZCTX(_("DMGFX^Disabled")), "0");
- e.addValue(e, _("Skeletal"), "1");
- e.addValue(e, ZCTX(_("DMGFX^All")), "2");
- e.configureXonoticTextSliderValues(e);
me.gotoRC(me, 1.25, 3.2); me.setFirstColumn(me, me.currentColumn);
- me.TD(me, 1, 3, e = makeXonoticRadioButton_T(1, "r_coronas", "0", _("No dynamic lighting"),
- _("Enable corona flares around certain lights")));
- me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticRadioButton_T(1, "gl_flashblend", string_null, _("Fake corona lighting"),
- _("Enable faster but uglier dynamic lights by rendering bright coronas instead of real dynamic lights")));
- makeMulti(e, "r_coronas");
- me.TR(me);
- me.TD(me, 1, 2, e = makeXonoticRadioButton_T(1, "r_shadow_realtime_dlight", string_null, _("Realtime dynamic lighting"),
- _("Enable rendering of dynamic lights such as explosions and rocket lights")));
- makeMulti(e, "r_coronas");
+ me.TD(me, 1, 2, e = makeXonoticCheckBox_T(0, "r_shadow_realtime_dlight", _("Realtime dynamic lights"),
+ _("Enable dynamic lights such as explosions and rocket lights")));
+ makeMulti(e, "!gl_flashblend");
me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_shadow_realtime_dlight_shadows", _("Shadows"),
- _("Enable rendering of shadows from dynamic lights")));
+ _("Realtime dynamic lights cast shadows")));
setDependent(e, "r_shadow_realtime_dlight", 1, 1);
me.TR(me);
me.TD(me, 1, 2, e = makeXonoticCheckBox_T(0, "r_shadow_realtime_world", _("Realtime world lighting"),
- _("Enable rendering of full realtime world lighting on maps that support it. Note that this might have a big impact on performance.")));
+ _("Enable realtime world lighting on maps that support it. May have a big impact on performance.")));
me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_shadow_realtime_world_shadows", _("Shadows"),
- _("Enable rendering of shadows from realtime world lights")));
+ _("Realtime world lights cast shadows")));
setDependent(e, "r_shadow_realtime_world", 1, 1);
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "r_shadow_usenormalmap", _("Use normal maps"),
- _("Enable use of directional shading on textures")));
+ _("Enable directional shading on textures")));
setDependentOR(e, "r_shadow_realtime_dlight", 1, 1, "r_shadow_realtime_world", 1, 1);
me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_shadow_shadowmapping", _("Soft shadows")));
setDependentWeird(e, someShadowCvarIsEnabled);
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Corona intensity:")));
+ me.TD(me, 1, 2, e = makeXonoticSlider_T(0, 1.5, 0.1, "r_coronas",
+ _("Brightness of corona flare effect around lights, default 1")));
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 2.8, e = makeXonoticCheckBox_T(0, "r_coronas_occlusionquery", _("Fade corona according to visibility"),
- _("Fade coronas according to visibility")));
- setDependent(e, "r_coronas", 1, 1);
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBox_T(0, "r_coronas_occlusionquery", _("Fade coronas according to visibility"),
+ _("Use occlusion queries to fade coronas")));
+ setDependent(e, "r_coronas", 0.1, 2);
me.TR(me);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_bloom", _("Bloom"),
// later I would like quite a few more options in this tab.
me.gotoRC(me, 0, 1); me.setFirstColumn(me, me.currentColumn);
+ me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Players")));
+ me.TR(me);
+ me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_forceplayermodels", _("Force player models to mine")));
+ me.TR(me);
+ me.TD(me, 1, 1.25, e = makeXonoticTextLabel(0, _("Force player colors to mine:")));
+ me.TD(me, 1, 1.75, e = makeXonoticTextSlider("cl_forceplayercolors"));
+ e.addValue(e, _("Never"), "0");
+ e.addValue(e, _("In non teamplay modes only"), "1");
+ e.addValue(e, _("Always"), "2");
+ e.addValue(e, _("Only in Duel"), "3");
+ e.configureXonoticTextSliderValues(e);
+ me.TR(me);
+ me.TD(me, 1, 1.25, e = makeXonoticTextLabel(0, _("Body fading:")));
+ me.TD(me, 1, 1.75, e = makeXonoticSlider(0, 2, 0.2, "cl_deathglow"));
+ me.TR(me);
+ me.TR(me);
me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Items")));
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_simple_items", _("Use simple 2D images instead of item models")));
me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Unavailable alpha:")));
- me.TD(me, 1, 2, e = makeXonoticSlider(0, 1, 0.1, "cl_ghost_items"));
+ me.TD(me, 1, 1.25, e = makeXonoticTextLabel(0, _("Unavailable item opacity:")));
+ me.TD(me, 1, 1.75, e = makeXonoticSlider(0, 1, 0.1, "cl_ghost_items"));
me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Unavailable color:")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_ghost_items_color"));
+ me.TD(me, 1, 1.25, e = makeXonoticTextLabel(0, _("Unavailable item color:")));
+ me.TD(me, 1, 1.75, e = makeXonoticTextSlider("cl_ghost_items_color"));
e.addValue(e, ZCTX(_("GHOITEMS^Black")), "-1 -1 -1");
e.addValue(e, ZCTX(_("GHOITEMS^Dark")), "0.1 0.1 0.1");
e.addValue(e, ZCTX(_("GHOITEMS^Tinted")), "0.6 0.6 0.6");
e.addValue(e, ZCTX(_("GHOITEMS^Blue")), "-1 -1 3");
e.configureXonoticTextSliderValues(e);
setDependent(e, "cl_ghost_items", 0.001, 1);
-
me.TR(me);
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Players")));
+ me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Weapon")));
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_forceplayermodels", _("Force player models to mine")));
+ me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "r_drawviewmodel", _("Draw 1st person weapon model"),
+ _("May reduce FPS")));
me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Force player colors to mine")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_forceplayercolors"));
- e.addValue(e, _("Never"), "0");
- e.addValue(e, _("In non teamplay modes only"), "1");
- e.addValue(e, _("Always"), "2");
- e.addValue(e, _("Only in Duel"), "3");
- e.configureXonoticTextSliderValues(e);
+ me.TDempty(me, 0.25);
+ me.TD(me, 1, 1.00, e = makeXonoticRadioButton_T(1, "cl_gunalign", "4", _("Left align"),
+ _("Position of the weapon model; requires reconnect")));
+ setDependent(e, "r_drawviewmodel", 1, 1);
+ me.TD(me, 1, 0.75, e = makeXonoticRadioButton_T(1, "cl_gunalign", "1", _("Center"),
+ _("Position of the weapon model; requires reconnect")));
+ setDependent(e, "r_drawviewmodel", 1, 1);
+ me.TD(me, 1, 0.75, e = makeXonoticRadioButton_T(1, "cl_gunalign", "3", _("Right align"),
+ _("Position of the weapon model; requires reconnect")));
+ setDependent(e, "r_drawviewmodel", 1, 1);
me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Body fading:")));
- me.TD(me, 1, 2, e = makeXonoticSlider(0, 2, 0.2, "cl_deathglow"));
+ me.TD(me, 1, 1.25, e = makeXonoticTextLabel(0, _("Weapon model opacity:")));
+ setDependent(e, "r_drawviewmodel", 1, 1);
+ me.TD(me, 1, 1.75, e = makeXonoticTextSlider("cl_viewmodel_alpha"));
+ setDependent(e, "r_drawviewmodel", 1, 1);
+ e.addValue(e, "15%", "0.15");
+ e.addValue(e, "25%", "0.25");
+ e.addValue(e, "50%", "0.5");
+ e.addValue(e, "75%", "0.75");
+ e.addValue(e, "100%", "1");
+ e.configureXonoticTextSliderValues(e);
me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Gibs:")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_nogibs"));
- e.addValue(e, ZCTX(_("GIBS^None")), "1");
- e.addValue(e, ZCTX(_("GIBS^Few")), "0.75");
- e.addValue(e, ZCTX(_("GIBS^Many")), "0.5");
- e.addValue(e, ZCTX(_("GIBS^Lots")), "0");
- e.configureXonoticTextSliderValues(e);
- setDependent(e, "cl_gentle", 0, 0);
+ me.TDempty(me, 0.25);
+ me.TD(me, 1, 1.375, e = makeXonoticCheckBox_T(0, "cl_followmodel", _("Gun model swaying"), "-"));
+ makeMulti(e, "cl_leanmodel");
+ setDependent(e, "r_drawviewmodel", 1, 1);
+
+ me.TD(me, 1, 1.375, e = makeXonoticCheckBox(0, "cl_bobmodel", _("Gun model bobbing")));
+ setDependent(e, "r_drawviewmodel", 1, 1);
}
e.sendCvars = true;
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_unpress_attack_on_weapon_switch", _("Release attack buttons when you switch weapons")));
- me.TR(me);
- me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "r_drawviewmodel", _("Draw 1st person weapon model"),
- _("Draw the weapon model")));
- me.TR(me);
- me.TDempty(me, 0.2);
- me.TD(me, 1, 0.9, e = makeXonoticRadioButton_T(1, "cl_gunalign", "4", _("Left align"),
- _("Position of the weapon model; requires reconnect")));
- setDependent(e, "r_drawviewmodel", 1, 1);
- me.TD(me, 1, 0.9, e = makeXonoticRadioButton_T(1, "cl_gunalign", "1", _("Center"),
- _("Position of the weapon model; requires reconnect")));
- setDependent(e, "r_drawviewmodel", 1, 1);
- me.TD(me, 1, 1.0, e = makeXonoticRadioButton_T(1, "cl_gunalign", "3", _("Right align"),
- _("Position of the weapon model; requires reconnect")));
- setDependent(e, "r_drawviewmodel", 1, 1);
- me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Weapon model opacity:")));
- setDependent(e, "r_drawviewmodel", 1, 1);
- me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_viewmodel_alpha"));
- setDependent(e, "r_drawviewmodel", 1, 1);
- e.addValue(e, "15%", "0.15");
- e.addValue(e, "25%", "0.25");
- e.addValue(e, "50%", "0.5");
- e.addValue(e, "75%", "0.75");
- e.addValue(e, "100%", "1");
- e.configureXonoticTextSliderValues(e);
- me.TR(me);
- me.TR(me);
- me.TDempty(me, 0.2);
- me.TD(me, 1, 2.8, e = makeXonoticCheckBox_T(0, "cl_followmodel", _("Gun model swaying"), "-"));
- makeMulti(e, "cl_leanmodel");
- setDependent(e, "r_drawviewmodel", 1, 1);
- me.TR(me);
- me.TDempty(me, 0.2);
- me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "cl_bobmodel", _("Gun model bobbing")));
- setDependent(e, "r_drawviewmodel", 1, 1);
me.gotoRC(me, me.rows - 1, 0); me.setFirstColumn(me, me.currentColumn);
me.TD(me, 1, me.columns, weaponsApplyButton);
}
me.TD(me, 1, 3, e = makeXonoticCheckBox_T(1.022, "m_pitch", _("Invert aiming"),
_("Invert mouse movement on the Y-axis")));
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "menu_mouse_absolute", _("Use system mouse positioning"), "-"));
+ me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "menu_mouse_absolute", _("Use system cursor speed and position in menu"), "-"));
makeMulti(e, "hud_cursormode");
e.onClick = CheckBox_Click_Redisplay;
e.onClickEntity = e;
entity e;
//entity sk;
+ entity miscApplyButton = makeXonoticCommandButton(_("Apply immediately"), '0 0 0',
+ "menu_restart;"
+ , COMMANDBUTTON_APPLY);
+ miscApplyButton.disableOnClick = true;
+
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Network")));
- me.TR(me);
- me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Client UDP port:")));
- me.TD(me, 1, 1.5, e = makeXonoticInputBox_T(0, "cl_port",
- _("Force client to use chosen port unless it is set to 0")));
- me.TR(me);
+ me.TD(me, 1, 3.25, e = makeXonoticHeaderLabel(_("Network")));
me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Bandwidth:")));
+ me.TD(me, 1, 1.25, e = makeXonoticTextLabel(0, _("UDP bandwidth:")));
me.TD(me, 1, 2, e = makeXonoticTextSlider_T("_cl_rate",
- _("Specify your network speed")));
+ _("Speed limit for the game protocol")));
e.addValue(e, _("56k"), "4000");
e.addValue(e, _("ISDN"), "7000");
e.addValue(e, _("Slow ADSL"), "20000");
e.addValue(e, _("Fast ADSL"), "40000");
e.addValue(e, _("Broadband"), "66666");
e.configureXonoticTextSliderValues(e);
+ if(cvar_type("crypto_aeslevel") & CVAR_TYPEFLAG_ENGINE)
+ {
+ me.TR(me);
+ me.TD(me, 1, 1.25, e = makeXonoticTextLabel(0, _("UDP encryption:")));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider_T("crypto_aeslevel",
+ _("AES encryption of the game protocol")));
+ e.addValue(e, _("Disabled"), "0");
+ e.addValue(e, _("Supported"), "1");
+ e.addValue(e, _("Requested"), "2");
+ e.addValue(e, _("Required"), "3");
+ e.configureXonoticTextSliderValues(e);
+ }
me.TR(me);
- me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Downloads:")));
- me.TD(me, 1, 2, e = makeXonoticSlider_T(1, 5, 1, "cl_curl_maxdownloads",
- _("Maximum number of concurrent HTTP/FTP downloads")));
- me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Download speed:")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_curl_maxspeed"));
- ADDVALUE_SPEED_KB(50);
- ADDVALUE_SPEED_KB(100);
- ADDVALUE_SPEED_KB(300);
- ADDVALUE_SPEED_KB(500);
- ADDVALUE_SPEED_MB(1, 1000);
- ADDVALUE_SPEED_MB(2, 2000);
- e.addValue(e, strzone(_("Unlimited")), "0");
- e.configureXonoticTextSliderValues(e);
- me.TR(me);
- if(cvar("developer") > 0)
- {
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Local latency:")));
- me.TD(me, 1, 2, e = makeXonoticSlider(0, 1000, 25, "cl_netlocalping"));
- }
- me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "shownetgraph", _("Show netgraph"),
- _("Show a graph of packet sizes and other information")));
- me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_movement", _("Client-side movement prediction")));
+ me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "cl_netrepeatinput", _("Packet loss compensation"),
+ _("Smooths movement during packet loss, but doubles the amount of data sent")));
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_movement_errorcompensation", _("Movement error compensation")));
setDependent(e, "cl_movement", 1, 1);
me.TR(me);
- if(cvar_type("crypto_aeslevel") & CVAR_TYPEFLAG_ENGINE)
- me.TD(me, 1, 3, e = makeXonoticCheckBoxEx(2, 1, "crypto_aeslevel", _("Use encryption (AES) when available"))); // TODO: move up
+ me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "shownetgraph", _("Show net graph"),
+ _("Show graph of UDP packets, may reduce FPS")));
+ if(cvar("developer") > 0)
+ {
+ me.TR(me);
+ me.TR(me);
+ me.TD(me, 1, 1.25, e = makeXonoticTextLabel(0, _("Local latency:")));
+ me.TD(me, 1, 2, e = makeXonoticSlider(0, 1000, 25, "cl_netlocalping"));
+ }
+ me.TR(me);
+ me.TR(me);
+ me.TD(me, 1, 1.25, e = makeXonoticTextLabel(0, _("HTTP Download speed:")));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider_T("cl_curl_maxspeed",
+ _("Speed limit of HTTP file downloads")));
+ ADDVALUE_SPEED_KB(64);
+ ADDVALUE_SPEED_KB(128);
+ ADDVALUE_SPEED_KB(256);
+ ADDVALUE_SPEED_KB(512);
+ ADDVALUE_SPEED_MB(1, 1024);
+ ADDVALUE_SPEED_MB(2, 2048);
+ ADDVALUE_SPEED_MB(4, 4096);
+ ADDVALUE_SPEED_MB(8, 8192);
+ e.addValue(e, strzone(_("Unlimited")), "0");
+ e.configureXonoticTextSliderValues(e);
+ me.TR(me);
+ me.TD(me, 1, 1.25, e = makeXonoticTextLabel(0, _("Simultaneous downloads:")));
+ me.TD(me, 1, 2, e = makeXonoticSlider(1, 5, 1, "cl_curl_maxdownloads"));
+ me.TR(me);
+
- me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
- me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Framerate")));
+ me.gotoRC(me, 0, 3.5); me.setFirstColumn(me, me.currentColumn);
+ me.TD(me, 1, 2.5, e = makeXonoticHeaderLabel(_("Framerate")));
me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Maximum:")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_maxfps"));
- ADDVALUE_FPS(30);
- ADDVALUE_FPS(60);
+ me.TD(me, 1, 0.75, e = makeXonoticTextLabel(0, _("Maximum:")));
+ me.TD(me, 1, 1.75, e = makeXonoticTextSlider("cl_maxfps"));
+ ADDVALUE_FPS(62.5);
ADDVALUE_FPS(100);
ADDVALUE_FPS(125);
ADDVALUE_FPS(150);
ADDVALUE_FPS(200);
ADDVALUE_FPS(250);
- ADDVALUE_FPS(400);
+ ADDVALUE_FPS(500);
e.addValue(e, ZCTX(_("MAXFPS^Unlimited")), "0");
e.configureXonoticTextSliderValues(e);
me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Target:")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_minfps"));
+ me.TD(me, 1, 0.75, e = makeXonoticTextLabel(0, _("Target:")));
+ me.TD(me, 1, 1.75, e = makeXonoticTextSlider("cl_minfps"));
e.addValue(e, ZCTX(_("TRGT^Disabled")), "0");
ADDVALUE_FPS(30);
ADDVALUE_FPS(60);
ADDVALUE_FPS(150);
ADDVALUE_FPS(200);
ADDVALUE_FPS(250);
- ADDVALUE_FPS(400);
e.configureXonoticTextSliderValues(e);
me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Idle limit:")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_maxidlefps"));
+ me.TD(me, 1, 0.75, e = makeXonoticTextLabel(0, _("Idle limit:")));
+ me.TD(me, 1, 1.75, e = makeXonoticTextSlider("cl_maxidlefps"));
ADDVALUE_FPS(10);
ADDVALUE_FPS(20);
ADDVALUE_FPS(30);
e.addValue(e, ZCTX(_("IDLFPS^Unlimited")), "0");
e.configureXonoticTextSliderValues(e);
me.TR(me);
- me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_maxfps_alwayssleep", _("Save processing time for other apps")));
- setDependent(e, "cl_maxfps", 1, 1000);
- me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "showfps", _("Show frames per second"),
+ me.TD(me, 1, 2.5, e = makeXonoticCheckBox_T(0, "showfps", _("Show frames per second"),
_("Show your rendered frames per second")));
- me.TR(me);
- me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Other")));
- me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Menu tooltips:")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider_T("menu_tooltips",
- _("Menu tooltips: disabled, standard or advanced (also shows cvar or console command bound to the menu item)")));
- e.addValue(e, ZCTX(_("TLTIP^Disabled")), "0");
- e.addValue(e, ZCTX(_("TLTIP^Standard")), "1");
- e.addValue(e, ZCTX(_("TLTIP^Advanced")), "2");
- e.configureXonoticTextSliderValues(e);
- me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "showtime", _("Show current date and time"),
- _("Show current date and time of day, useful on screenshots")));
- makeMulti(e, "showdate");
- me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "developer", _("Enable developer mode")));
+
+ me.gotoRC(me, 8, 3.5); me.setFirstColumn(me, me.currentColumn);
+ me.TD(me, 1, 2.5, e = makeXonoticHeaderLabel(_("Other")));
me.TR(me);
- me.TDempty(me, 0.5);
+ me.TDempty(me, 0.25);
me.TD(me, 1, 2, e = makeXonoticButton_T(_("Advanced settings..."), '0 0 0',
_("Advanced settings where you can tweak every single variable of the game")));
e.onClick = DialogOpenButton_Click;
e.onClickEntity = main.cvarsDialog;
me.TR(me);
- me.TDempty(me, 0.5);
+ me.TDempty(me, 0.25);
me.TD(me, 1, 2, e = makeXonoticButton(_("Factory reset"), '0 0 0'));
e.onClick = DialogOpenButton_Click;
e.onClickEntity = main.resetDialog;
+ me.TR(me);
+ me.TR(me);
+ me.TD(me, 1, 2.5, e = makeXonoticCheckBox(0, "developer", _("Enable developer mode")));
+ e.applyButton = miscApplyButton;
+
+ me.gotoRC(me, me.rows - 1, 0);
+ me.TD(me, 1, me.columns, miscApplyButton);
}
#undef ADDVALUE_FPS
{
entity e, sk;
+ entity userApplyButton = makeXonoticCommandButton(_("Apply immediately"), '0 0 0',
+ "menu_cmd sync;"
+ , COMMANDBUTTON_APPLY);
+ userApplyButton.disableOnClick = true;
+/* FIXME: It would be nice to have this button apply the skin and language settings
+ * but there's only 1 onClickEntity */
+
me.TR(me);
me.TDempty(me, 0.25);
me.TD(me, 1, 2.5, e = makeXonoticHeaderLabel(_("Menu Skins")));
me.TD(me, 1, 1.5, e = makeXonoticHeaderLabel(_("Text Language")));
me.TR(me);
me.TD(me, 8, 1.5, sk = makeXonoticLanguageList());
-
me.gotoRC(me, 9, 3.75); me.setFirstColumn(me, me.currentColumn);
me.TD(me, 1, 1.5, e = makeXonoticButton(_("Set language"), '0 0 0'));
e.onClick = SetLanguage_Click;
e.onClickEntity = sk;
- me.gotoRC(me, 11.5, 3.25); me.setFirstColumn(me, me.currentColumn);
- me.TD(me, 1, 2.5, e = makeXonoticCheckBox_T(0, "cl_gentle", _("Disable gore effects and harsh language"),
- _("Replace blood and gibs with content that does not have any gore effects")));
- e.sendCvars = true;
+ me.gotoRC(me, 11, 3.0625); me.setFirstColumn(me, me.currentColumn);
+ me.TD(me, 1, 0.75, e = makeXonoticTextLabel(0, _("Font/UI size:")));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider("menu_vid_scale"));
+ e.addValue(e, ZCTX(_("SZ^Unreadable")), "-1");
+ e.addValue(e, ZCTX(_("SZ^Tiny")), "-0.75");
+ e.addValue(e, ZCTX(_("SZ^Little")), "-0.5");
+ e.addValue(e, ZCTX(_("SZ^Small")), "-0.25");
+ e.addValue(e, ZCTX(_("SZ^Medium")), "0");
+ e.addValue(e, ZCTX(_("SZ^Large")), "0.25");
+ e.addValue(e, ZCTX(_("SZ^Huge")), "0.5");
+ e.addValue(e, ZCTX(_("SZ^Gigantic")), "0.75");
+ e.addValue(e, ZCTX(_("SZ^Colossal")), "1");
+ e.configureXonoticTextSliderValues(e);
+ e.applyButton = userApplyButton;
+ me.TR(me);
+ me.TD(me, 1, 0.75, e = makeXonoticTextLabel(0, _("Menu tooltips:")));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider_T("menu_tooltips",
+ _("Menu tooltips: disabled, standard or advanced (also shows cvar or console command bound to the menu item)")));
+ e.addValue(e, ZCTX(_("TLTIP^Disabled")), "0");
+ e.addValue(e, ZCTX(_("TLTIP^Standard")), "1");
+ e.addValue(e, ZCTX(_("TLTIP^Advanced")), "2");
+ e.configureXonoticTextSliderValues(e);
+ me.TR(me);
+ me.TDempty(me, 0.5625);
+ me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "showdate", _("Show date")));
+ me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "showtime", _("Show time")));
+
+ me.gotoRC(me, me.rows - 1, 0);
+ me.TD(me, 1, me.columns, userApplyButton);
}
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Resolution:")));
me.TD(me, 1, 2, e = makeXonoticResolutionSlider());
e.applyButton = videoApplyButton;
- me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Font/UI size:")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider("menu_vid_scale"));
- e.addValue(e, ZCTX(_("SZ^Unreadable")), "-1");
- e.addValue(e, ZCTX(_("SZ^Tiny")), "-0.75");
- e.addValue(e, ZCTX(_("SZ^Little")), "-0.5");
- e.addValue(e, ZCTX(_("SZ^Small")), "-0.25");
- e.addValue(e, ZCTX(_("SZ^Medium")), "0");
- e.addValue(e, ZCTX(_("SZ^Large")), "0.25");
- e.addValue(e, ZCTX(_("SZ^Huge")), "0.5");
- e.addValue(e, ZCTX(_("SZ^Gigantic")), "0.75");
- e.addValue(e, ZCTX(_("SZ^Colossal")), "1");
- e.configureXonoticTextSliderValues(e);
- e.applyButton = videoApplyButton;
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Color depth:")));
me.TD(me, 1, 2, e = makeXonoticTextSlider_T("vid_bitsperpixel",
me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "vid_fullscreen", _("Full screen")));
e.applyButton = videoApplyButton;
me.TD(me, 1, 2, e = makeXonoticCheckBox_T(0, "vid_vsync", _("Vertical Synchronization"),
- _("Enable vertical synchronization to prevent tearing, will cap your fps to the screen refresh rate")));
-
+ _("Prevent screen tearing, increases input latency and caps your fps to the screen refresh rate")));
me.TR(me);
- if(cvar("developer") > 0)
- {
- me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "v_flipped", _("Flip view horizontally"),
- _("Poor man's left handed mode")));
- }
me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Anisotropy:")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider_T("gl_texture_anisotropy",
- _("Anisotropic filtering quality")));
- e.addValue(e, ZCTX(_("ANISO^Disabled")), "1");
- e.addValue(e, _("2x"), "2");
- e.addValue(e, _("4x"), "4");
- e.addValue(e, _("8x"), "8");
- e.addValue(e, _("16x"), "16");
- e.configureXonoticTextSliderValues(e);
+ me.TD(me, 1, 3, e = makeXonoticCheckBoxEx(2, 0, "r_viewfbo", _("High-quality frame buffer")));
+ setDependent(e, "vid_samples", 0, 1);
me.TR(me);
+ if(cvar_type("vid_gl20") & CVAR_TYPEFLAG_ENGINE)
+ {
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Antialiasing:")));
setDependent(e, "r_viewfbo", 0, 0);
me.TD(me, 1, 2, e = makeXonoticTextSlider_T("vid_samples",
e.configureXonoticTextSliderValues(e);
setDependent(e, "r_viewfbo", 0, 0);
e.applyButton = videoApplyButton;
+ }
+ else
+ {
+ me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Resolution scaling:")));
+ me.TD(me, 1, 2, e = makeXonoticSlider_T(0.666, 2, 0.5, "r_viewscale",
+ _("Screen or window size multiplier, > 1 achieves antialiasing, < 1 may help slow GPUs")));
+ }
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBoxEx(2, 0, "r_viewfbo", _("High-quality frame buffer")));
- setDependent(e, "vid_samples", 1, 1);
+ me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Anisotropy:")));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider_T("gl_texture_anisotropy",
+ _("Anisotropic filtering quality")));
+ e.addValue(e, ZCTX(_("ANISO^Disabled")), "1");
+ e.addValue(e, _("2x"), "2");
+ e.addValue(e, _("4x"), "4");
+ e.addValue(e, _("8x"), "8");
+ e.addValue(e, _("16x"), "16");
+ e.configureXonoticTextSliderValues(e);
me.TR(me);
me.TR(me);
e.addValue(e, ZCTX(_("DF^World")), "1");
e.addValue(e, ZCTX(_("DF^All")), "2");
e.configureXonoticTextSliderValues(e);
- me.TR(me);
if(cvar_type("gl_vbo") & CVAR_TYPEFLAG_ENGINE)
{
+ me.TR(me);
+ me.TR(me);
me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Vertex Buffer Objects (VBOs)")));
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Contrast:")));
me.TD(me, 1, 2, e = makeXonoticSlider_T(1.0, 3.0, 0.05, "v_contrast",
_("Brightness of white")));
- me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Gamma:")));
- setDependent(e, "vid_gl20", 1, 1);
- me.TD(me, 1, 2, e = makeXonoticSlider_T(0.5, 2.0, 0.05, "v_gamma",
- _("Inverse gamma correction value, a brightness effect that does not affect white or black")));
- setDependent(e, "vid_gl20", 1, 1);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Contrast boost:")));
setDependent(e, "vid_gl20", 1, 1);
me.TD(me, 1, 2, e = makeXonoticSlider_T(1.0, 5.0, 0.1, "v_contrastboost",
_("By how much to multiply the contrast in dark areas")));
setDependent(e, "vid_gl20", 1, 1);
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Gamma:")));
+ setDependent(e, "vid_gl20", 1, 1);
+ me.TD(me, 1, 2, e = makeXonoticSlider_T(0.5, 2.0, 0.05, "v_gamma",
+ _("Inverse gamma correction value, a brightness effect that does not affect white or black")));
+ setDependent(e, "vid_gl20", 1, 1);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Saturation:")));
setDependent(e, "vid_gl20", 1, 1);
setDependent(e, "vid_gl20", 1, 1);
me.TR(me);
me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, ZCTX(_("LIT^Ambient:"))));
+ me.TD(me, 1, 1, e = makeXonoticTextLabel(0, ZCTX(_("LIT^Ambient light:"))));
me.TD(me, 1, 2, e = makeXonoticSlider_T(0, 20.0, 0.25, "r_ambient",
- _("Ambient lighting, if set too high it tends to make light on maps look dull and flat")));
+ _("If set too high it tends to make light on maps look dull and flat, default 4")));
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Intensity:")));
me.TD(me, 1, 2, e = makeXonoticSlider_T(0.5, 2.0, 0.05, "r_hdr_scenebrightness",
- _("Global rendering brightness")));
+ _("Global rendering brightness, default 1")));
me.TR(me);
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "gl_finish", _("Wait for GPU to finish each frame"),
}
if(cvar("developer") > 0)
{
- me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "v_psycho", _("Psycho coloring (easter egg)")));
- setDependent(e, "vid_gl20", 1, 1);
- me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "r_trippy", _("Trippy vertices (easter egg)")));
- setDependent(e, "vid_gl20", 1, 1);
+ me.TR(me);
+ me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "v_flipped", _("Flip view horizontally")));
+ me.TR(me);
+ me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "v_psycho", _("Psycho coloring (easter egg)")));
+ setDependent(e, "vid_gl20", 1, 1);
+ me.TR(me);
+ me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "r_trippy", _("Trippy vertices (easter egg)")));
+ setDependent(e, "vid_gl20", 1, 1);
}
me.gotoRC(me, me.rows - 1, 0);
gl_texturecompression_sky 1
cl_maxfps 250
+cl_minfps 60
seta menu_mouse_absolute 1 "use the OS mouse pointer motion for menu"
seta menu_mouse_speed 1 "speed multiplier for the mouse in the menu (does not affect in-game aiming)"
seta cl_animate_items 1
seta cl_ghost_items 0.45 "enable ghosted items (when between 0 and 1, overrides the alpha value)"
seta cl_ghost_items_color "-1 -1 -1" "color of ghosted items (colormod format: 0 0 0 leaves the color unchanged, negative values allowed)"
-seta cl_simple_items 0 "enable simple items (if server allows)"
+seta cl_simple_items 0 "enable 2D items (if server allows), may improve FPS"
set cl_simpleitems_postfix "_luma" "posfix to add fo model name when simple items are enabled"
set cl_weapon_stay_color "2 0.5 0.5" "Color of picked up weapons when g_weapon_stay > 0 (colormod format: 0 0 0 leaves the color unchanged, negative values allowed)"
set cl_weapon_stay_alpha 0.75 "Alpha of picked up weapons when g_weapon_stay > 0"