title: Client Source Code Map
description: Map of the Ryzom client source tree for developers — subsystems, key files, and the NeL libraries they build on
published: true
date: 2026-07-05T00:00:00.000Z
tags:
editor: markdown
dateCreated: 2022-03-13T03:04:33.835Z
This page is a map of the Ryzom client source code for developers working on the client. The client is a single-process application built on the NeL engine libraries. All source lives under ryzom/client/src/ (~300 files) with several subdirectories for major subsystems.
Startup and Main Loop
The client follows a linear startup → main loop → shutdown flow.
File
Purpose
client.cpp
Entry point, creates the application context
init.cpp
Initializes all subsystems: driver, scene, sound, PACS, network, UI, sheets
init_main_loop.cpp
Final initialization before entering the game loop
main_loop.cpp
The per-frame update: input, network, entity updates, scene animate/render, UI, swap
release.cpp
Shutdown and cleanup of all subsystems
global.h / global.cpp
Global pointers to the driver, scene, sound, PACS, and other singletons
Configuration
File
Purpose
client_cfg.h / client_cfg.cpp
CClientConfig — loads and manages client.cfg settings via CConfigFile. All tunable client parameters (resolution, graphics quality, keybinds, paths, etc.) live here
Networking
The client connects to the Frontend Service (FES) via a custom UDP protocol with reliability and ordering, plus a QUIC alternative.
File
Purpose
network_connection.h
CNetworkConnection — the low-level UDP connection to the FES, handles impulse encoding/decoding, position sending, and database synchronization
quic_connection.h
QUIC-based alternative transport (optional, uses MsQuic)
net_manager.h
CNetManager — higher-level wrapper that dispatches incoming impulse messages to handlers
connection.h
Login → shard selection → character selection → enter game flow
login.h
Login screen logic and web authentication
far_tp.h
Far teleport (cross-shard teleport) handling
Entity System
All visible objects in the world — player characters, NPCs, creatures, forage sources, FX — are entities managed by an entity manager.
File
Purpose
entity_cl.h
CEntityCL — base class for all client-side entities. Manages position, visual properties (VPA/VPB/VPC), animations, selection state
character_cl.h
CCharacterCL — extends CEntityCL for humanoid characters (players and NPCs). Equipment rendering, face/hair, emotes
player_cl.h
CPlayerCL — other players
player_r2_cl.h
CPlayerR2CL — Ring scenario player entities
user_entity.h
CUserEntity — the local player. Handles movement input, camera modes, selection, combat targeting
forage_source_cl.h
CForageSourceCL — forage extraction sources
entity_animation_manager.h
Loads and manages all animation sets for entity types
Client Database
The server pushes a hierarchical property database to the client via the mirror system. The client reads it for HP bars, inventory, skills, target info, and everything else the UI displays.
File
Purpose
cdb_synchronised.h
CCDBSynchronised — the client-side database, synchronized from server impulse messages
ingame_database_manager.h
Updates entity visual state from database property changes
Data Sheets
The client loads Georges data sheets (creature stats, item definitions, visual properties, etc.) as packed sheets for fast startup.
File
Purpose
sheet_manager.h
CSheetManager — loads all packed sheets on startup, provides lookup by CSheetId
client_sheets/
Sheet loader structs for each sheet type: creatures, items, FX, skills, weather, etc.
User Interface
The UI is an XML-driven system with Lua scripting. Interface layouts are defined in XML files under data/gamedev/interfaces_v3/. Action handlers respond to UI events.