From: bones_was_here Date: Thu, 1 Oct 2020 00:49:17 +0000 (+1000) Subject: Much menu and graphics tweaking X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=0913edb5e8c91cfd9ac36686dfad5ea96de2a6bf;p=xonotic%2Fxonotic-data.pk3dir.git Much menu and graphics tweaking --- diff --git a/effects-high.cfg b/effects-high.cfg index b935b03b1..6a268dc96 100644 --- a/effects-high.cfg +++ b/effects-high.cfg @@ -5,7 +5,7 @@ cl_particles 1 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 @@ -32,7 +32,7 @@ r_shadow_shadowmapping 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 diff --git a/effects-low.cfg b/effects-low.cfg index 7c9921a32..49152bf39 100644 --- a/effects-low.cfg +++ b/effects-low.cfg @@ -5,7 +5,7 @@ cl_particles 1 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 diff --git a/effects-normal.cfg b/effects-normal.cfg index c519617f6..259acbb83 100644 --- a/effects-normal.cfg +++ b/effects-normal.cfg @@ -5,7 +5,7 @@ cl_particles 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 @@ -32,7 +32,7 @@ r_shadow_shadowmapping 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 diff --git a/effects-omg.cfg b/effects-omg.cfg index 7b05a1eaa..c60e23b61 100644 --- a/effects-omg.cfg +++ b/effects-omg.cfg @@ -5,7 +5,7 @@ cl_particles 1 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 @@ -32,7 +32,7 @@ r_shadow_shadowmapping 0 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 diff --git a/effects-ultimate.cfg b/effects-ultimate.cfg index ea5989c34..b170c888e 100644 --- a/effects-ultimate.cfg +++ b/effects-ultimate.cfg @@ -32,7 +32,7 @@ r_shadow_shadowmapping 1 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 diff --git a/effects-ultra.cfg b/effects-ultra.cfg index 58bd10f92..dadb99d77 100644 --- a/effects-ultra.cfg +++ b/effects-ultra.cfg @@ -32,7 +32,7 @@ r_shadow_shadowmapping 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 diff --git a/qcsrc/common/mutators/mutator/damagetext/ui_damagetext.qc b/qcsrc/common/mutators/mutator/damagetext/ui_damagetext.qc index 1a00d1546..1bbb62fb9 100644 --- a/qcsrc/common/mutators/mutator/damagetext/ui_damagetext.qc +++ b/qcsrc/common/mutators/mutator/damagetext/ui_damagetext.qc @@ -5,7 +5,8 @@ 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); @@ -35,5 +36,55 @@ CLASS(XonoticDamageTextSettings, XonoticTab) 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) diff --git a/qcsrc/lib/warpzone/client.qc b/qcsrc/lib/warpzone/client.qc index df1ab6b80..929a68d1c 100644 --- a/qcsrc/lib/warpzone/client.qc +++ b/qcsrc/lib/warpzone/client.qc @@ -31,7 +31,15 @@ NET_HANDLE(ENT_CLIENT_WARPZONE, bool isnew) 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) @@ -92,7 +100,15 @@ NET_HANDLE(ENT_CLIENT_WARPZONE_CAMERA, bool isnew) 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"; diff --git a/qcsrc/menu/xonotic/dialog_settings.qc b/qcsrc/menu/xonotic/dialog_settings.qc index bd6fd4c4f..af1b7b353 100644 --- a/qcsrc/menu/xonotic/dialog_settings.qc +++ b/qcsrc/menu/xonotic/dialog_settings.qc @@ -19,10 +19,10 @@ void XonoticSettingsDialog_fill(entity me) 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); } diff --git a/qcsrc/menu/xonotic/dialog_settings_audio.qc b/qcsrc/menu/xonotic/dialog_settings_audio.qc index 1f8c6d81c..590d51862 100644 --- a/qcsrc/menu/xonotic/dialog_settings_audio.qc +++ b/qcsrc/menu/xonotic/dialog_settings_audio.qc @@ -139,10 +139,6 @@ void XonoticAudioSettingsTab_fill(entity me) _("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); @@ -152,6 +148,15 @@ void XonoticAudioSettingsTab_fill(entity 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")); diff --git a/qcsrc/menu/xonotic/dialog_settings_effects.qc b/qcsrc/menu/xonotic/dialog_settings_effects.qc index 4d62d459e..d85035ee2 100644 --- a/qcsrc/menu/xonotic/dialog_settings_effects.qc +++ b/qcsrc/menu/xonotic/dialog_settings_effects.qc @@ -65,36 +65,36 @@ void XonoticEffectsSettingsTab_fill(entity me) 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; @@ -127,11 +127,8 @@ void XonoticEffectsSettingsTab_fill(entity me) 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"))); @@ -160,6 +157,7 @@ void XonoticEffectsSettingsTab_fill(entity me) 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)"))); @@ -179,47 +177,36 @@ void XonoticEffectsSettingsTab_fill(entity me) 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"), diff --git a/qcsrc/menu/xonotic/dialog_settings_game_model.qc b/qcsrc/menu/xonotic/dialog_settings_game_model.qc index 822e2c32d..872274a31 100644 --- a/qcsrc/menu/xonotic/dialog_settings_game_model.qc +++ b/qcsrc/menu/xonotic/dialog_settings_game_model.qc @@ -27,15 +27,31 @@ void XonoticGameModelSettingsTab_fill(entity me) // 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"); @@ -43,30 +59,40 @@ void XonoticGameModelSettingsTab_fill(entity me) 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); } diff --git a/qcsrc/menu/xonotic/dialog_settings_game_weapons.qc b/qcsrc/menu/xonotic/dialog_settings_game_weapons.qc index 5c77faffb..0a2ff1ae8 100644 --- a/qcsrc/menu/xonotic/dialog_settings_game_weapons.qc +++ b/qcsrc/menu/xonotic/dialog_settings_game_weapons.qc @@ -58,43 +58,7 @@ void XonoticGameWeaponsSettingsTab_fill(entity me) 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); } diff --git a/qcsrc/menu/xonotic/dialog_settings_input.qc b/qcsrc/menu/xonotic/dialog_settings_input.qc index b025c3aff..e4ccfb5f8 100644 --- a/qcsrc/menu/xonotic/dialog_settings_input.qc +++ b/qcsrc/menu/xonotic/dialog_settings_input.qc @@ -67,7 +67,7 @@ void XonoticInputSettingsTab_fill(entity me) 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; diff --git a/qcsrc/menu/xonotic/dialog_settings_misc.qc b/qcsrc/menu/xonotic/dialog_settings_misc.qc index 504479368..4b20dee27 100644 --- a/qcsrc/menu/xonotic/dialog_settings_misc.qc +++ b/qcsrc/menu/xonotic/dialog_settings_misc.qc @@ -23,75 +23,89 @@ void XonoticMiscSettingsTab_fill(entity me) 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); @@ -100,11 +114,10 @@ void XonoticMiscSettingsTab_fill(entity me) 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); @@ -112,40 +125,29 @@ void XonoticMiscSettingsTab_fill(entity me) 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 diff --git a/qcsrc/menu/xonotic/dialog_settings_user.qc b/qcsrc/menu/xonotic/dialog_settings_user.qc index 5e5b707fa..b7bce99be 100644 --- a/qcsrc/menu/xonotic/dialog_settings_user.qc +++ b/qcsrc/menu/xonotic/dialog_settings_user.qc @@ -18,6 +18,13 @@ void XonoticUserSettingsTab_fill(entity me) { 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"))); @@ -62,14 +69,38 @@ void XonoticUserSettingsTab_fill(entity me) 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); } diff --git a/qcsrc/menu/xonotic/dialog_settings_video.qc b/qcsrc/menu/xonotic/dialog_settings_video.qc index c43e0af99..d9ee0b98f 100644 --- a/qcsrc/menu/xonotic/dialog_settings_video.qc +++ b/qcsrc/menu/xonotic/dialog_settings_video.qc @@ -33,20 +33,6 @@ void XonoticVideoSettingsTab_fill(entity me) 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", @@ -59,25 +45,14 @@ void XonoticVideoSettingsTab_fill(entity me) 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", @@ -88,9 +63,23 @@ void XonoticVideoSettingsTab_fill(entity me) 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); @@ -101,9 +90,10 @@ void XonoticVideoSettingsTab_fill(entity 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); @@ -126,18 +116,18 @@ void XonoticVideoSettingsTab_fill(entity me) 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); @@ -146,13 +136,13 @@ void XonoticVideoSettingsTab_fill(entity me) 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"), @@ -165,12 +155,14 @@ void XonoticVideoSettingsTab_fill(entity me) } 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); diff --git a/xonotic-client.cfg b/xonotic-client.cfg index e39a892fb..f4a4e2ebc 100644 --- a/xonotic-client.cfg +++ b/xonotic-client.cfg @@ -627,6 +627,7 @@ gl_texturecompression_q3bsplightmaps 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)" @@ -859,7 +860,7 @@ seta cl_items_nofade 0 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"