config - ryzom/ryzomcore GitHub Wiki
title: Client Configuration description: How the Ryzom client configuration system works — client.cfg, client_default.cfg, presets, the in-game config tool — and a reference of commonly tuned variables published: true date: 2026-07-05T00:00:00.000Z tags: editor: markdown dateCreated: 2026-07-05T00:00:00.000Z
The client reads its configuration from two files at startup: client_default.cfg, the read-only defaults shipped with the game, and client.cfg, the per-user file that overrides them. Both use the NeL config file syntax: Variable = value; lines, with strings quoted, and { } braces for lists.
client_default.cfg ships next to the client executable and holds the complete set of defaults, including metadata the in-game configuration tool needs (slider ranges and quality presets, below). It is looked up in the current directory, then the startup path. Don't edit it as a user — it is replaced by updates.
client.cfg is the user's file. It only needs to contain the variables the user wants to override; everything else falls through to the defaults. On first run the client creates it (detecting a suitable screen resolution); the in-game configuration tool writes changed values back to it when SaveConfig is enabled. Its location is platform dependent (next to the executable, or in the user profile directory on installed builds).
All variables are read once at startup by CClientConfig::setValues() (client_cfg.cpp — the authoritative, complete list of variables). Three behaviors matter:
- A variable missing from both files falls back to the compiled-in default, with a
Default value used for 'X'warning in the log. - Variables read with the
_DEVmacros exist only in development builds (FINAL_VERSIONcompiles the read out entirely) — e.g.ForceWaterReflections. Setting them in a retail client does nothing. - The config file is watched: when it changes on disk, or when the in-game tool applies a change, the affected values are re-read and
updateFromClientCfg()(main_loop_utilities.cpp) applies whatever can change live — most graphics quality settings take effect immediately without a restart.
The game configuration window (data/gamedev/interfaces_v3/game_config.xml) binds interface widgets directly to config variables through the DDX system (interface_v3/interface_ddx.cpp). Conventions, using MaxWaterReflections as the example:
- A
<param ... type="cfg" widget="sbint" link="MaxWaterReflections" realtime="true"/>entry binds a slider to the variable;realtimeapplies it live throughupdateFromClientCfg(). - Integer and float sliders read their range from companion variables in
client_default.cfg:MaxWaterReflections_min,_max,_step. - The quality preset buttons (Low/Medium/Normal/High) read
_ps0…_ps3companions (MaxWaterReflections_ps0 = 0;etc.). Only variables registered in the preset list (CfgPresetListinlogin.cpp) participate in presets; others keep their value when a preset is applied. - Widget labels are translation keys (e.g.
uiFxMaxWaterReflections) resolved from the translation data.
Curated reference of the commonly tuned variables, by category. It is deliberately not exhaustive — client_cfg.cpp and client_default.cfg remain the canonical list — but covers what players and developers usually touch. Variables marked dev are _DEV reads, absent from retail builds.
| Variable | Meaning |
|---|---|
FullScreen |
Fullscreen (1) or windowed (0) |
Width, Height
|
Resolution; 0 on first run auto-detects |
Depth, Frequency
|
Color depth and refresh rate (fullscreen) |
Driver3D |
"Auto", "OpenGL", "Direct3D", "OpenGLES", "OpenGL3" (or 0–4) |
WaitVBL |
VSync |
Contrast, Gamma, Luminosity
|
Display color adjustments |
InterfaceScale |
UI scaling factor |
| Variable | Meaning |
|---|---|
LandscapeThreshold |
Landscape tessellation precision (higher = finer geometry) |
LandscapeTileNear |
Distance up to which detail tiles are rendered |
Vision |
View distance |
MicroVeget, MicroVegetDensity
|
Micro-vegetation on/off and density (percent) |
HDEntityTexture |
High-definition character textures |
DivideTextureSizeBy2 |
Halve all texture resolutions (low memory) |
AnisotropicFilter |
Anisotropic texture filtering level |
SkinNbMaxPoly, FxNbMaxPoly
|
Polygon budgets for skinned characters and FX |
NbMaxSkeletonNotCLod |
Number of characters rendered fully before impostor LOD |
CharacterFarClip |
Distance beyond which characters are not rendered |
| Variable | Meaning |
|---|---|
Shadows |
Dynamic shadow maps for characters |
FXAA |
Fullscreen antialiasing |
Bloom, SquareBloom, DensityBloom
|
Bloom post-effect and its shape/strength |
MaxWaterReflections |
Water planes with a realtime planar reflection per frame, largest on screen first (default 3; 0 disables, water falls back to its envmap) |
MaxWaterReflectionTextures |
Reflection render target textures per eye; reflected planes tile into shared textures, and shrink to fit when the budget is full (default 1; -1 = as many as needed — not exposed on the slider) |
ForceWaterReflections |
dev — treat every water surface as reflection-enabled regardless of the per-shape artist flag; the quickest way to evaluate a zone's water before re-exporting shapes |
| Variable | Meaning |
|---|---|
SoundOn |
Master sound toggle |
DriverSound |
Sound driver: "Auto", "OpenAL", "XAudio2", "FMod", "DirectSound"
|
MaxTrack |
Number of simultaneous audio tracks |
SoundForceSoftwareBuffer |
Force software mixing |
MusicVolume, SoundSFXVolume, SoundGameMusicVolume
|
Volume levels |
| Variable | Meaning |
|---|---|
StartupHost |
The login web server the client connects to (e.g. "https://core.ryzom.dev") — this is the variable to change to point a client at a different shard; the login flow then supplies the shard list and patch location |
StartupPage |
Login page path on that host (e.g. "/login/r2_login.php") |
Application |
{ "<app name>", "<executable>", "<path>" } — the application identifier sent at login and the client the patcher restarts |
LanguageCode |
Interface language ("en", "fr", "de", …) |
PatchWanted |
Whether the client patches itself at startup — set to 0 on developer builds, or the patcher will overwrite your locally built client and data |
PatchUrl |
Manual patch server override — normally unnecessary, since the login server tells the client where to patch from |
SaveConfig |
Write changed settings back to client.cfg on exit |
AllowDebugCommands |
Expose the debug category of interface actions/macros in retail builds |
MovieShooterMemory |
Memory budget for the movie shooter capture tool (0 = disabled) |
- Client Commands — several config-adjacent facilities are commands rather than variables
- NeL config files — the underlying file format and API
- Console variables — engine-level variables inspectable at runtime