====== OpenNeL /Ryzom Core ====== {{ :fr:tag:informatique:ryzom_core:ryzom_core.jpg?400 |}} Le moteur de jeu utilisé pour créer le [[fr:tag:informatique:mmorpg:start|MMORPG]] de [[um1>Khanat]]. Il s'agit d'un moteur libre avec systèmes serveur et client de jeu en 3D, dont le rendu graphique est assuré par le moteur [[fr:tag:graphisme:3d:nel:start|NeL]]. Nous avons abandonné l’usage du client pour en développer un avec le [[fr:godot:start|Godot Engine]]. Nous conservons néanmoins toute la partie serveur. {{INLINETOC}} ===== Présentation générale du système OpenNeL / Ryzom Core ===== OpenNeL / Ryzom Core se base sur une architecture de serveur et de clients. Les clients sont installés par les joueurs sur leur ordinateur, et le serveur désignant l’ensemble des services qui permettent de mettre tous ces clients en relation. Lisez aussi [[fr:ryzom_data|cette présentation synthétique]] de l'organisation technique de OpenNeL / Ryzom Core. ==== Le client (abandonné par Khaganat) ==== Il est composé de plusieurs éléments : * les fichiers exécutables (les programmes en eux-même) ; * les fichiers de configuration ; * les fichiers de données. Les fichiers exécutables peuvent être de deux types : il existe un client standard (qui permet l’accès au jeu) et un client debug qui comporte des outils supplémentaires pour le déploiement du jeu (utilisé donc plutôt par les développeurs). Les fichiers de configuration sont des petits fichiers (de type texte/xml) qui contiennent les paramètres d’affichage, d’accès etc. On peut les éditer depuis le client de jeu ou manuellement, avec un éditeur de texte. C’est là qu’on indique par exemple les adresses du serveur principal. Il y a ensuite les données du jeu, à savoir les données graphiques, sonores, de localisation (traductions) et de gameplay. Elles sont en général compilées dans des fichiers .bnp qui ne sont rien d’autre que des archives un peu spéciales (une sorte de .tar). On les trouve habituellement dans le sous-répertoire /data, mais le client va les chercher dans plusieurs répertoires, dans un certain ordre (selon les indications précisées lors de la compilation du client). Le client écrase les fichiers avec des noms identiques par la dernière version lue. Par défaut, il lit en dernier le répertoire /user. On peut donc y mettre des fichiers de test pour voir les changements que cela occasionne. On n’est d’ailleurs pas obligé d’archiver les données dans un .bnp, les fichiers en l’état fonctionnement très bien, dès l’instant où ils respectent les formats standards acceptés par le jeu. Parmi les données graphiques, on trouve surtout des .shape, des .ig et des .dds. Les deux premiers sont des fichiers 3D utilisés par le moteur de rendu du jeu (NeL), et le troisième est un format optimisé pour le rendu des jeux en 3D (on peut également utiliser du .png - ou du targa). Il y a ensuite tout un tas de fichiers de gameplay, ce sont les Data Sheets ("DS", qui sont sous forme binarisée pour éviter les exploits faciles) et les Primitives. Ces derniers sont les éléments de base qui permettent de construire le monde, on y définit tout. Il y a un script qui fait une sorte de compilation des Data Sheets. Ceux-ci sont des fichiers xml très hiérarchisés et standardisés qui permettent de créer les données pour gérer tous les aspects du monde par le serveur et/ou le client. On y trouve toutes les créatures décrites, toutes les compétences, tous les objets etc. Rien que dans les fichiers de définition, il y en a plusieurs centaines. Un jeu comme Ryzom peut représenter des milliers de Data Sheets au final. Il est nécessaire de générer une DS pour chaque type de matière première, de chaque qualité, de chaque pays (par exemple). Ça constitue comme une vaste encyclopédie de ce qui est possible. Les Primitives constitueraient plutôt l’atlas de ce qui existe. Elles se basent bien sûr sur les DS mais elles décrivent exactement quoi est où et comment il doit réagir/interagir. C’est là qu’on code les missions, les PNJs, les groupes de mob, les dépôts de matières premières, les conditions d’exploitation etc. ==== Le serveur ==== Ce terme désigne en fait un très grand nombre de services qui font vivre le monde. On parle habituellement d’un “shard”, qui désigne une instance du monde, comme les serveurs anglophones/germanophones/francophones d’avant fusion. Il n’y a désormais plus qu’un shard chez Winch Gate (en plus de //Yubo// pour les tests). La [[fr:serveur_tour|liste des services distribués]] est disponible. On trouve par exemple un service qui gère les Intelligences Artificielles par continent. Le système peut déporter plein de services sur des machines annexes, il a été conçu voilà 15 ans, à un moment où les ordinateurs étaient bien moins puissants. Cela permet aussi une meilleure montée en charge. Par ailleurs, le système a été conçu pour minimiser les échanges de données. On peut jouer sans souci avec une clé 3G. C’est cette légèreté qui permet ce que même des très gros jeux ne gèrent pas toujours bien : des événements à plus de 200 joueurs en contact visuel. Le serveur se base sur les Primitives et les Data Sheets pour gérer les interactions avec joueurs, mais lui a les données non binarisées, et il en a plus, beaucoup plus. Alors que le client n'a que les infos "statiques" (l'emplacement des bâtiments par exemple), le serveur a aussi les données de ce qui va changer (l'endroit où apparaissent les créatures par exemple). Il intègre aussi des fichiers de traduction dédiés, qui lui permettent de construire des phrases de façon dynamique, maîtrisant très bien la localisation. Il existe un certain nombre de commandes qu’on peut rentrer sur le terminal de gestion du shard mais aussi des commandes qu’on peut rentrer dans son chat en jeu, comme la commande “/emote”. Si on a les privilèges suffisant, ça permet de faire des opérations de MJ/DEV : se téléporter, faire apparaître des créatures, des objets etc. Ce sont ces commandes qu’utilisent les CSR et Anim et que Winch Gate remplace peu à peu par des scripts Arkitect. Cela permet de gérer un peu le gameplay en direct pour des choses pas trop complexes. Pour les choses qui doivent durer ou être bien gérées, il faut créer une Primitive. ==== Les outils OpenNeL / Ryzom Core ==== Historiquement il existait 3 outils : Object Viewer pour tout ce qui avait trait aux graphismes (création et gestion des systèmes de particules, de la microvégétation etc.), Georges Editor pour les Datasheets et World Editor pour les Primitives. Plus un plugin dédié à 3DSMax pour créer les objets 3D (.ig et shape) mais aussi et surtout créer les paysages (.zone) que ce soient des éléments de briques LIGO (donc pouvant ensuite être assemblés dynamiquement comme des LEGOs justement) ou utilisés tels quels (comme Pyr sur le monde d’Atys par exemple). Les gens de Ryzom Core ont fini par créer un super outil (basé sur une version QT de Object Viewer au départ), qui s’appelle désormais Ryzom Core Studio. Il est conçu comme un cœur avec des plugins. Il y a donc un plugin Object Viewer, un autre World Editor, un autre Georges mais pas seulement. Ils ont ajouté un éditeur d’interface, un gestionnaire de paquets .bnp, un gestionnaire de traduction… ==== Les sources ==== On compile tous ces éléments à partir des sources : client, serveur, outils. Tout est dans un gros paquet de sources dans lesquelles on lance la compilation, qui y range les exécutables créés dans différents répertoires. Les sources sont de trois types : * données graphiques ; * données de jeu ; * code source pour les exécutables. Les données graphiques sont essentiellement des fichiers .max, lisibles uniquement par 3DSMax, pour être édités par lui pour ensuite, via le plugin créer les données pour le jeu en lui-même. On y trouve aussi les textures (sous forme .png en général) et les systèmes de particules, modifiables avec Object Viewer. Quand on lance le pipeline, il s’occupe de transformer toutes ces données pour en faire des fichiers aux bons formats pour le jeu. On a ensuite les données de jeu : data sheets et primitives. Si les data sheets sont modifiées on doit les recompiler pour le client et les replacer dans le serveur puis le relancer (et le fournir aux clients bien sûr). Donc chaque fois qu’on veut créer un nouvel objet, une nouvelle compétence…, il faut les recompiler rapidement et tout relancer, puis patcher les clients. Le système de patchlet de Ryzom est quasiment opérationnel (il n’est pas encore intégralement déployé en raison de soucis de compatibilité de la dernière version LUA avec Windows, quand ce sera bon, elle sera implémentée). Les primitives sont plus souples, il semble qu’on puisse plus facilement les recharger sans devoir relancer tout le shard. Enfin, les sources pour les exécutables sont très volumineuses. On y trouve aussi bien les sources (codé en c++) du client, du serveur que du moteur de jeu 3D, créé spécifiquement, appelé [[fr:tag:graphisme:3d:nel:start|NeL]] que les sources pour les outils (Ryzom Core Studio mais aussi un certain nombre d’utilitaires en ligne de commande), et même pour le plugin 3DSMax. Tout y est. Quand on fait une compilation, ça dépose les résultats dans divers répertoires, de façon intriquée selon les options indiquées par le compilateur. Nous mettons à disposition toutes les données de Khanat via [[gitlab>/|un service GitLab]]. \\ Nous avons réalisé une présentation avec des informations sur [[fr:principe_de_developpement_sur_khaganat|la façon dont nous organisons nos dépôts et contributions]]. **Les data sheets** Les données de jeu se basent sur des datasheets, qui permettent de créer les caractéristiques des éléments de base (objets, créatures etc.). **[[fr:tag:informatique:ryzom_core:datasheet:start|> Annuaire des types de data sheets <]]** * [[fr:datasheets2|Présentation de la structure des data sheets]] * [[fr:ds:rcdsparentage|L'héritage dans les data sheets]] * [[fr:ds:rcdschampscalcules|Les champs calculés dans les data sheets]] * [[fr:ds:rcmptypeperusage|Type de MP selon usage]] * [[fr:ds:rcmpparameterusage|paramètres de MP à renseigner selon usage]] **Les primitives** Les primitives sont les fichiers qui construisent le monde en créant des instances d'objets tels que définis par les data sheets. **[[fr:tag:informatique:ryzom_core:datasheet:primitives:start|> Documentation des primitives <]]** ===== Liste des articles ===== ==== Le serveur de jeu ==== * [[fr:shard|Installer un serveur de jeu]] * [[fr:commandes_temp|Les commandes du moteur OpenNeL / Ryzom Core]] * [[fr:shard_commands|La gestion d'un 'shard' OpenNeL / Ryzom Core]] * [[fr:ds:rcskillcodes|Les codes des Compétences (Skills)]] * [[fr:informations_hardcodees|Les informations hardcodées en C++ dans le serveur OpenNeL / Ryzom Core]] * [[fr:creer_un_univers|Créer un univers de jeu]] * [[fr:creation_nouveau_continent|Création d'un nouveau continent]] * [[fr:creation_nouvel_objet|Création d'un nouvel objet visible IG]] * [[fr:nom_des_bots|Changer le nom des bots en jeu]] * [[fr:ajout_titre|Ajout d'un titre de personnage]] * [[fr:organisation_dossier|Organisation des données graphiques]] * [[fr:les_conventions_de_nommage|Les conventions de nommage des données graphiques]] * [[fr:bug:start|Bugs et exploits connus à résoudre]] * [[fr:ds:rcticks|Les ticks, pour compter le temps]] ==== Le client OpenNeL / Ryzom Core ’abandonné par Khaganat) ==== * [[fr:jouer|Utiliser le client OpenNeL / Ryzom Core version Khanat]] * [[fr:debugmode|La version DebugMode du client]] * [[fr:client_config|Les fichiers de configuration du client]] * [[fr:clavier|Configuration du clavier pour le client]] * [[fr:configuration_interface_client|Comment modifier l'interface client]] * [[fr:creer_icone_objet|Création des icônes d'inventaire pour le client]] * [[fr:creer_background_lancement|Création des images de lancement du client]] * [[fr:error|Les erreurs au lancement du client OpenNeL / Ryzom Core]] * [[fr:capture_video_ig|Comment faire des captures vidéo avec le client]] * [[fr:commandes_client_temp|Les commandes du client]] * [[fr:chat_ig|Le Chat InGame]] ==== Outils OpenNeL / Ryzom Core / Divers ==== * [[fr:principe_de_developpement_sur_khaganat|Récupérer les données de Khanat]] * [[fr:outils_rc|Les outils OpenNeL / Ryzom Core]] * [[fr:linux_pipeline|Le pipeline de génération graphique NeL sous Linux]] * [[fr:pluginblender|Réflexion sur la réalisation d'un plugin d'export depuis Blender vers NeL3D]] * [[fr:export_import_nel|Réflexion sur l'export vers le moteur graphique NeL3D]] * [[fr:les_materiaux_nel|Les matériaux sous NeL3D]] * [[fr:nel_texture|La gestion des textures par le moteur graphiques NeL3D]] * [[fr:multitexturage|Multitexturage d'un objet NeL3D]] * [[fr:lexique|Lexique de termes du moteur OpenNeL / Ryzom Core]] ==== Tous les articles OpenNeL / Ryzom Core ==== Ceci est une liste automatique de tous les articles portants le tag **Ryzom Core**. {{topic>Ryzom_Core&noheader&sort¬ags}} ==== Sous-catégories ==== Ceci est une liste automatique des tags associés à **Ryzom Core**. ~~NOCACHE~~ {{tag>informatique client_rc_obsolete Obsolète}}