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.

The two files

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).

Reading rules

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 _DEV macros exist only in development builds (FINAL_VERSION compiles 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 in-game configuration tool

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; realtime applies it live through updateFromClientCfg().
  • 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_ps3 companions (MaxWaterReflections_ps0 = 0; etc.). Only variables registered in the preset list (CfgPresetList in login.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.

Variable reference

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.

Display and driver

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 04)
WaitVBL VSync
Contrast, Gamma, Luminosity Display color adjustments
InterfaceScale UI scaling factor

Scene and landscape quality

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

Special effects

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

Sound

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

System, network, misc

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)

See also

⚠️ **GitHub.com Fallback** ⚠️