We should have a comprehensive graphics menu with a lot of options. These options are in regards to visual non HUD-effects. HUD related 2D graphics options are in a separate HUD menu. I should say that the following breakdown of what the menu could be is a very long-term vision, and it's not likely that we can have everything I've pitched here in the first release. For the initial version the menu can be much more stripped back, but it should be built in such a way where it is easily expandable, so some of the features listed here won't be a total nightmare to add later on.
So, to start: Eventually, it would be great if we had 4 graphics presets such as these:
Ultra (All visual effects on, the best the game can look) [Best Quality]
High (Most FPS eating options turned off, game should still look great) [Good Quality]
Medium (Most options turned off, priority in good and stable FPS without having to resort to fullbright) [Good Performance]
Low (All options turned off with fullbright enabled) [Best Performance]
The player would select a graphics preset and then the individual settings would change below as he cycled through the presets. Once a desired preset is selected, the player could then enable/disable specific options within that preset. For the initial release I think it's fine if we only have the individual options, and even from those we don't need everything I've listed here.
We can discuss later which settings should belong to which preset, but ideally the most FPS heavy options that bring a relatively small amount of visual difference should be turned off first as you go down the quality level. The idea here is that a new player could easily boost FPS or increase visual quality with just a few clicks since not everyone is fully aware of what every graphic option does and how (if at all) it affects performance. Some people just directly resort to fullbright when experiencing performance problems, sacrificing a ton of visual quality when all that would have been enough was toggling effects off for example.
Many players also run very customized configs when it comes to graphics options, so would be great if you could save and load graphics presets you've created:
!graphicspreset save <name>!graphicspreset load <name>
(Maybe some buttons for the same actions in the graphics menu?)
Some settings should also have a Map option, because maps might either have a specific setting that has to be enabled for the map to look right and some other map might have a broken feature where enabling something could cause visual problems. Some examples:
Having specular enabled on maps which don't have reflections compiled causes them to not look right. An option that changes depending on the map would be good here, so the player could have specular disabled on maps which don't support it, but enabled on maps which do. The player wouldn't have to change the option every time a map with broken specular comes on.
DynEnt glass walls in the heaven-series, if a player has the Map option enabled, we could disable dynamic entities for these maps, but keep it on for others that actually make use of the feature such as mp_mody_v4.
Some maps could enable visual effects like blur, that a player generally might not want to have on at all, unless a map enables it. Again a map option would be great here.
These map specific settings require us to add some overrides to map .gsc files, but we could easily do this for the handful of broken maps. Basically everytime we add a map to the server, while we do other edits to the .gsc files we could introduce this override alongside the other changes and only for those maps that require it. For example a map like mp_eb_bouncer1 we would add r_specular 0 dvar to make the map look how it's intended. If the player has his specular option as 'Off' which forces r_specular 0 regardless of the map setting, nothing happens. If the player has specular as 'On', then the specular is forced on every map with r_specular 1 (because some people prefer broken specular over no specular at all). And finally if the player has his specular option as 'Map' then the specular is always set to 1, unless the map .gsc has a script setting it to 0, so in this case it would be 0.
The map setting more than anything is a convenience feature that's great for people who like to play maps the way they are meant to look, without having to spend a lot of time adjusting their config after every map switch.
Individual settings:
Fullbright - On / Off
r_fullbright
Specular - On / Map / Off
r_specular
Normal - On / Off
r_normal
Detail - On / Off
r_detail
Decals - On / Off
r_drawDecalsfx_marks
Dynamic Shadows - On / Map / Off
sm_enable
Glow - Map / Off
r_glow_allowed
Blur - Map / Off
r_blur
Depth Of Field - On / Off
r_dof_enable
Effects - On / Off
fx_enable
Fog - Map / Off
r_fog
Sun - Map / Off
r_drawSun
Water - On / Off
r_drawWater
Dynamic Entities - Map / Off
dynEnt_active
Model LOD - High / Medium / Low
r_lodBiasRigidr_lodBiasSkinnedr_lodScaleRigidr_lodScaleSkinned
Geometry Draw Distance - Infinite / Number
r_zfar
Player Hide Distance - Infinite / Number
There's plenty more we could add here, but these are probably the most important things. I think gameplay related visual options such as these need their own menu:
Viewmodel
3rd Person
Field Of View
Nopredict
Bobbing
.. as they are starting to alter the gameplay significantly, and don't really impact performance in any meaningful way (except Nopredict, but it alters gameplay alot.).
All in all the settings menu would look like this:
We should have a comprehensive graphics menu with a lot of options. These options are in regards to visual non HUD-effects. HUD related 2D graphics options are in a separate HUD menu. I should say that the following breakdown of what the menu could be is a very long-term vision, and it's not likely that we can have everything I've pitched here in the first release. For the initial version the menu can be much more stripped back, but it should be built in such a way where it is easily expandable, so some of the features listed here won't be a total nightmare to add later on.
So, to start: Eventually, it would be great if we had 4 graphics presets such as these:
The player would select a graphics preset and then the individual settings would change below as he cycled through the presets. Once a desired preset is selected, the player could then enable/disable specific options within that preset. For the initial release I think it's fine if we only have the individual options, and even from those we don't need everything I've listed here.
We can discuss later which settings should belong to which preset, but ideally the most FPS heavy options that bring a relatively small amount of visual difference should be turned off first as you go down the quality level. The idea here is that a new player could easily boost FPS or increase visual quality with just a few clicks since not everyone is fully aware of what every graphic option does and how (if at all) it affects performance. Some people just directly resort to fullbright when experiencing performance problems, sacrificing a ton of visual quality when all that would have been enough was toggling effects off for example.
Many players also run very customized configs when it comes to graphics options, so would be great if you could save and load graphics presets you've created:
!graphicspreset save <name>
!graphicspreset load <name>
(Maybe some buttons for the same actions in the graphics menu?)Some settings should also have a
Map
option, because maps might either have a specific setting that has to be enabled for the map to look right and some other map might have a broken feature where enabling something could cause visual problems. Some examples:Map
option enabled, we could disable dynamic entities for these maps, but keep it on for others that actually make use of the feature such as mp_mody_v4.Some maps could enable visual effects like blur, that a player generally might not want to have on at all, unless a map enables it. Again a map option would be great here.
These map specific settings require us to add some overrides to map .gsc files, but we could easily do this for the handful of broken maps. Basically everytime we add a map to the server, while we do other edits to the .gsc files we could introduce this override alongside the other changes and only for those maps that require it. For example a map like mp_eb_bouncer1 we would add
r_specular 0
dvar to make the map look how it's intended. If the player has his specular option as 'Off' which forcesr_specular 0
regardless of the map setting, nothing happens. If the player has specular as 'On', then the specular is forced on every map withr_specular 1
(because some people prefer broken specular over no specular at all). And finally if the player has his specular option as 'Map' then the specular is always set to 1, unless the map .gsc has a script setting it to 0, so in this case it would be 0.The map setting more than anything is a convenience feature that's great for people who like to play maps the way they are meant to look, without having to spend a lot of time adjusting their config after every map switch.
Individual settings:
Fullbright - On / Off
r_fullbright
Specular - On / Map / Off
r_specular
Normal - On / Off
r_normal
Detail - On / Off
r_detail
Decals - On / Off
r_drawDecals
fx_marks
Dynamic Shadows - On / Map / Off
sm_enable
Glow - Map / Off
r_glow_allowed
Blur - Map / Off
r_blur
Depth Of Field - On / Off
r_dof_enable
Effects - On / Off
fx_enable
Fog - Map / Off
r_fog
Sun - Map / Off
r_drawSun
Water - On / Off
r_drawWater
Dynamic Entities - Map / Off
dynEnt_active
Model LOD - High / Medium / Low
r_lodBiasRigid
r_lodBiasSkinned
r_lodScaleRigid
r_lodScaleSkinned
Geometry Draw Distance - Infinite / Number
r_zfar
Player Hide Distance - Infinite / Number
There's plenty more we could add here, but these are probably the most important things. I think gameplay related visual options such as these need their own menu:
Viewmodel
3rd Person
Field Of View
Nopredict
Bobbing
.. as they are starting to alter the gameplay significantly, and don't really impact performance in any meaningful way (except Nopredict, but it alters gameplay alot.).
All in all the settings menu would look like this: