Xonotic QuakeC
The free, fast arena FPS with crisp movement and a wide array of weapons
dialog_settings_effects.qc
Go to the documentation of this file.
2
3#include "slider_picmip.qh"
5#include "weaponslist.qh"
6#include "keybinder.qh"
7#include "commandbutton.qh"
8#include "textlabel.qh"
9#include "checkbox.qh"
10#include "textslider.qh"
11#include "mixedslider.qh"
12#include "slider.qh"
13#include "radiobutton.qh"
15
17{
19 me.configureDialog(me);
20 return me;
21}
22
24{
25 if(cvar("r_shadow_realtime_dlight"))
26 if(cvar("r_shadow_realtime_dlight_shadows"))
27 return true;
28 if(cvar("r_shadow_realtime_world"))
29 if(cvar("r_shadow_realtime_world_shadows"))
30 return true;
31 return false;
32}
33
35{
36 entity e, s;
37 entity effectsApplyButton = makeXonoticCommandButton(_("Apply immediately"), '0 0 0', "vid_restart", COMMANDBUTTON_APPLY);
38 effectsApplyButton.disableOnClick = true;
39 float n;
40 me.TR(me);
41 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Quality preset:")));
42 n = 5;
43 me.TD(me, 1, 5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^Low")), '0 0 0', "exec effects-low.cfg", 0));
44 e.applyButton = effectsApplyButton;
45 me.TD(me, 1, 5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^Medium")), '0 0 0', "exec effects-med.cfg", 0));
46 e.applyButton = effectsApplyButton;
47 me.TD(me, 1, 5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^Normal")), '0 0 0', "exec effects-normal.cfg", 0));
48 e.applyButton = effectsApplyButton;
49 me.TD(me, 1, 5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^High")), '0 0 0', "exec effects-high.cfg", 0));
50 e.applyButton = effectsApplyButton;
51 me.TD(me, 1, 5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^Ultra")), '0 0 0', "exec effects-ultra.cfg", 0));
52 e.applyButton = effectsApplyButton;
53
54 me.gotoRC(me, 1.25, 0);
55 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Geometry detail:")));
56 me.TD(me, 1, 2, e = makeXonoticMixedSlider_T("r_subdivisions_tolerance",
57 _("Change the smoothness of the curves on the map")));
58 e.addText(e, ZCTX(_("DET^Lowest")), 16);
59 e.addText(e, ZCTX(_("DET^Low")), 8);
60 e.addText(e, ZCTX(_("DET^Normal")), 4);
61 e.addText(e, ZCTX(_("DET^Good")), 3);
62 e.addText(e, ZCTX(_("DET^Best")), 2);
63 e.addText(e, ZCTX(_("DET^Insane")), 1);
64 e.configureXonoticMixedSliderValues(e);
65 e.applyButton = effectsApplyButton;
66 me.TR(me);
67 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Player detail:")));
68 me.TD(me, 1, 2, e = makeXonoticMixedSlider("cl_playerdetailreduction"));
69 e.addText(e, ZCTX(_("PDET^Low")), 4);
70 e.addText(e, ZCTX(_("PDET^Medium")), 3);
71 e.addText(e, ZCTX(_("PDET^Normal")), 2);
72 e.addText(e, ZCTX(_("PDET^Good")), 1);
73 e.addText(e, ZCTX(_("PDET^Best")), 0);
74 e.configureXonoticMixedSliderValues(e);
75 e.applyButton = effectsApplyButton;
76 me.TR(me);
77 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Texture resolution:")));
78 setDependent(e, "r_showsurfaces", 0, 0);
79 me.TD(me, 1, 2, e = makeXonoticPicmipSlider());
80 e.addText(e, ZCTX(_("RES^Lowest")), 1337);
81 e.addText(e, ZCTX(_("RES^Very low")), 2);
82 e.addText(e, ZCTX(_("RES^Low")), 1);
83 e.addText(e, ZCTX(_("RES^Normal")), 0);
84 e.addText(e, ZCTX(_("RES^Good")), -1);
85 e.addText(e, ZCTX(_("RES^Best")), -2);
86 e.configureXonoticMixedSliderValues(e);
87 setDependent(e, "r_showsurfaces", 0, 0);
88 e.applyButton = effectsApplyButton;
89 bool can_dds = GL_Have_TextureCompression();
90 me.TR(me);
91 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Texture compression:")));
92 if (can_dds)
93 setDependent(e, "r_showsurfaces", 0, 0);
94 else
95 e.disabled = true;
96 me.TD(me, 1, 2, e = makeXonoticMixedSlider("gl_texturecompression"));
97 e.addText(e, ZCTX(_("TCOMP^Fast")), 1);
98 e.addText(e, ZCTX(_("TCOMP^Good")), 2);
99 e.addText(e, ZCTX(_("TCOMP^None")), 0);
100 e.configureXonoticMixedSliderValues(e);
101 if (can_dds)
102 setDependent(e, "r_showsurfaces", 0, 0);
103 else
104 e.disabled = true;
105 e.applyButton = effectsApplyButton;
106 me.TR(me);
107 me.TDempty(me, 0.2);
108 me.TD(me, 1, 2.8, e = makeXonoticCheckBoxEx_T(1, 0, "r_sky", _("Show sky"), _("Disable sky for performance and visibility")));
109 me.TR(me);
110 me.TD(me, 1, 1, e = makeXonoticCheckBox_T(1, "mod_q3bsp_nolightmaps", _("Use lightmaps"),
111 _("Use high resolution lightmaps, which will look pretty but use up some extra video memory")));
112 e.applyButton = effectsApplyButton;
113 me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_glsl_deluxemapping", _("Deluxe mapping"),
114 _("Use per-pixel lighting effects")));
115 setDependent(e, "mod_q3bsp_nolightmaps", 0, 0);
116 if(cvar_type("vid_gl20") & CVAR_TYPEFLAG_ENGINE)
117 setDependentAND(e, "vid_gl20", 1, 1);
118 me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_shadow_gloss", _("Gloss"),
119 _("Enable the use of glossmaps on textures supporting it")));
120 setDependent(e, "mod_q3bsp_nolightmaps", 0, 0);
121 setDependentAND(e, "r_glsl_deluxemapping", 1, 1);
122 if(cvar_type("vid_gl20") & CVAR_TYPEFLAG_ENGINE)
123 setDependentAND(e, "vid_gl20", 1, 1);
124 me.TR(me);
125 me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_glsl_offsetmapping", _("Offset mapping"),
126 _("Offset mapping effect that will make textures with bumpmaps appear like they \"pop out\" of the flat 2D surface")));
127 if(cvar_type("vid_gl20") & CVAR_TYPEFLAG_ENGINE)
128 setDependent(e, "vid_gl20", 1, 1);
129 me.TD(me, 1, 2, e = makeXonoticCheckBox_T(0, "r_glsl_offsetmapping_reliefmapping", _("Relief mapping"),
130 _("Higher quality offset mapping, which also has a huge impact on performance")));
131 setDependent(e, "r_glsl_offsetmapping", 1, 1);
132 if(cvar_type("vid_gl20") & CVAR_TYPEFLAG_ENGINE)
133 setDependentAND(e, "vid_gl20", 1, 1);
134 me.TR(me);
135 me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_water", _("Reflections:"),
136 _("Reflection and refraction quality, has a huge impact on performance on maps with reflecting surfaces")));
137 if(cvar_type("vid_gl20") & CVAR_TYPEFLAG_ENGINE)
138 setDependent(e, "vid_gl20", 1, 1);
139 me.TD(me, 1, 2, e = makeXonoticMixedSlider_T("r_water_resolutionmultiplier",
140 _("Resolution of reflections/refractions")));
141 e.addText(e, _("Blurred"), 0.25);
142 e.addText(e, ZCTX(_("REFL^Good")), 0.5);
143 e.addText(e, _("Sharp"), 1);
144 e.configureXonoticMixedSliderValues(e);
145 setDependent(e, "r_water", 1, 1);
146 if(cvar_type("vid_gl20") & CVAR_TYPEFLAG_ENGINE)
147 setDependentAND(e, "vid_gl20", 1, 1);
148 me.TR(me);
149 me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "cl_decals", _("Decals"),
150 _("Enable decals (bullet holes and blood)")));
151 me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "cl_decals_models", _("Decals on models")));
152 setDependent(e, "cl_decals", 1, 1);
153 me.TR(me);
154 me.TDempty(me, 0.2);
155 me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Distance:")));
156 setDependentNOT(e, "cl_decals_fadetime", 0);
157 setDependentAND(e, "cl_decals", 1, 1);
158 me.TD(me, 1, 2, e = makeXonoticSlider_T(200, 500, 20, "r_drawdecals_drawdistance",
159 _("Decals further away than this will not be drawn")));
160 e.formatString = _("%s qu");
161 setDependentNOT(e, "cl_decals_fadetime", 0);
162 setDependentAND(e, "cl_decals", 1, 1);
163 me.TR(me);
164 me.TDempty(me, 0.2);
165 me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Fade time:")));
166 setDependent(e, "cl_decals", 1, 1);
167 me.TD(me, 1, 2, e = makeXonoticSlider_T(1, 20, 1, "cl_decals_fadetime",
168 _("Time in seconds before decals fade away")));
169 e.formatString = "s";
170 setDependent(e, "cl_decals", 1, 1);
171 me.TR(me);
172 me.TDempty(me, 0.2);
173 me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Damage effects:")));
174 me.TD(me, 1, 2, e = makeXonoticMixedSlider("cl_damageeffect"));
175 e.addText(e, ZCTX(_("DMGFX^Disabled")), 0);
176 e.addText(e, _("Skeletal"), 1);
177 e.addText(e, ZCTX(_("DMGFX^All")), 2);
178 e.configureXonoticMixedSliderValues(e);
179
180 me.gotoRC(me, 1.25, 3.2); me.setFirstColumn(me, me.currentColumn);
181 me.TD(me, 1, 2, e = makeXonoticCheckBox_T(0, "r_shadow_realtime_dlight", _("Realtime dynamic lights"),
182 _("Temporary realtime light sources such as explosions, rockets and powerups")));
183 makeMulti(e, "!gl_flashblend");
184 me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_shadow_realtime_dlight_shadows", _("Shadows"),
185 _("Shadows cast by realtime dynamic lights")));
186 setDependent(e, "r_shadow_realtime_dlight", 1, 1);
187 me.TR(me);
188 me.TD(me, 1, 2, e = makeXonoticCheckBox_T(0, "r_shadow_realtime_world", _("Realtime world lights"),
189 _("Realtime light sources included in certain maps. May have a big impact on performance.")));
190 me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_shadow_realtime_world_shadows", _("Shadows"),
191 _("Shadows cast by realtime world lights")));
192 setDependent(e, "r_shadow_realtime_world", 1, 1);
193 me.TR(me);
194 me.TDempty(me, 0.2);
195 me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "r_shadow_usenormalmap", _("Use normal maps"),
196 _("Directional shading of certain textures to simulate interaction of realtime light with a bumpy surface")));
197 setDependent(e, "r_shadow_realtime_dlight", 1, 1);
198 setDependentOR(e, "r_shadow_realtime_world", 1, 1);
199 me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_shadow_shadowmapping", _("Soft shadows")));
201 me.TR(me);
202 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Corona brightness:")));
203 me.TD(me, 1, 2, e = makeXonoticSlider_T(0, 1.5, 0.1, "r_coronas",
204 _("Flare effects around certain lights")));
205 me.TR(me);
206 me.TDempty(me, 0.2);
207 me.TD(me, 1, 2.8, e = makeXonoticCheckBox_T(0, "r_coronas_occlusionquery", _("Fade coronas according to visibility"),
208 _("Corona fading using occlusion queries")));
209 setDependentNOT(e, "r_coronas", 0);
210 me.TR(me);
211 me.TR(me);
212 me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_bloom", _("Bloom"),
213 _("Enable bloom effect, which brightens the neighboring pixels of very bright pixels. Has a big impact on performance.")));
214 me.TD(me, 1, 2, e = makeXonoticCheckBoxEx_T(0.5, 0, "hud_postprocessing_maxbluralpha", _("Extra postprocessing effects"),
215 _("Enables special postprocessing effects for when damaged or under water or using a powerup")));
216 makeMulti(e, "hud_powerup");
217 if(cvar_type("vid_gl20") & CVAR_TYPEFLAG_ENGINE)
218 setDependent(e, "vid_gl20", 1, 1);
219 me.TR(me);
220 s = makeXonoticSlider_T(0.1, 1, 0.1, "r_motionblur",
221 _("Motion blur strength - 0.4 recommended"));
222 me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(0, 1, s, _("Motion blur:")));
223 e.applyButton = effectsApplyButton;
224 if(s.value != e.savedValue)
225 e.savedValue = 0.4; // default
226 me.TD(me, 1, 2, s);
227 me.TR(me);
228 me.TR(me);
229 me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "cl_particles", _("Particles")));
230 me.TD(me, 1, 2, e = makeXonoticCheckBox_T(0, "cl_spawn_point_particles", _("Spawnpoint effects"),
231 _("Particle effects at all spawn points and whenever a player spawns")));
232 makeMulti(e, "cl_spawn_event_particles");
233 setDependent(e, "cl_particles", 1, 1);
234 me.TR(me);
235 me.TDempty(me, 0.2);
236 me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Quality:")));
237 setDependent(e, "cl_particles", 1, 1);
238 me.TD(me, 1, 2, e = makeXonoticSlider_T(0, 3.0, 0.25, "cl_particles_quality",
239 _("Multiplier for amount of particles. Less means less particles, which in turn gives for better performance")));
240 e.formatString = _("%sx");
241 setDependent(e, "cl_particles", 1, 1);
242 me.TR(me);
243 me.TDempty(me, 0.2);
244 me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Distance:")));
245 setDependent(e, "cl_particles", 1, 1);
246 me.TD(me, 1, 2, e = makeXonoticSlider_T(200, 3000, 200, "r_drawparticles_drawdistance",
247 _("Particles further away than this will not be drawn")));
248 e.formatString = _("%s qu");
249 setDependent(e, "cl_particles", 1, 1);
250
251 me.gotoRC(me, me.rows - 1, 0);
252 me.TD(me, 1, me.columns, effectsApplyButton);
253}
entity makeXonoticSliderCheckBox(float theOffValue, float isInverted, entity theControlledSlider, string theText)
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
entity makeXonoticCommandButton(string theText, vector theColor, string theCommand, int theFlags)
#define COMMANDBUTTON_APPLY
float CVAR_TYPEFLAG_ENGINE
float someShadowCvarIsEnabled(entity box)
void XonoticEffectsSettingsTab_fill(entity me)
entity makeXonoticEffectsSettingsTab()
#define ZCTX(s)
Definition i18n.qh:68
void setDependentWeird(entity e, float(entity) func)
Definition util.qc:249
bool GL_Have_TextureCompression()
Definition util.qc:20
void setDependentAND(entity e, string theCvarName, float theCvarMin, float theCvarMax)
Definition util.qc:213
void setDependentOR(entity e, string theCvarName, float theCvarMin, float theCvarMax)
Definition util.qc:231
void makeMulti(entity e, string otherCvars)
Definition util.qc:92
void setDependentNOT(entity e, string theCvarName, float theCvarValue)
Definition util.qc:192
void setDependent(entity e, string theCvarName, float theCvarMin, float theCvarMax)
Definition util.qc:180
float cvar(string name)
#define NEW(cname,...)
Definition oo.qh:117
entity makeXonoticPicmipSlider()
entity makeXonoticTextLabel(float theAlign, string theText)
Definition textlabel.qc:3
entity makeXonoticCheckBox_T(float isInverted, string theCvar, string theText, string theTooltip)
Definition checkbox.qc:3
entity makeXonoticCheckBoxEx_T(float theYesValue, float theNoValue, string theCvar, string theText, string theTooltip)
Definition checkbox.qc:33
entity makeXonoticCheckBox(float isInverted, string theCvar, string theText)
Definition checkbox.qc:28
entity makeXonoticMixedSlider(string theCvar)
Definition mixedslider.qc:9
entity makeXonoticMixedSlider_T(string theCvar, string theTooltip)
Definition mixedslider.qc:3
entity makeXonoticSlider_T(float theValueMin, float theValueMax, float theValueStep, string theCvar, string theTooltip)
Definition slider.qc:3