Bonjour bonjour,
J'ai décidé de vous présenter mon projet en cours, et qui devrait m'occuper longtemps (en espérant que le présenter me motive un peu à faire avancer la bête... ).
A savoir; c'est un projet que je réalise en loose, quand je n'ai rien d'autre à faire. L'avancement est donc chaotique et il ne sortira pas demain.
Bref, je vous présente donc Liminary.
C'est quoi ce mot !?
"Liminary" c'est un terme anglais vieilli qui désigne l'action de préparer quelquechose.
On peut dire que ça se rapproche un peu du mot français (aussi peu utilisé...) "Liminaire" qui désigne "l'action en elle-même".
Bref, un nom tout à fait à propos pour un outil qui se veut un facilitateur de projet.
Qu'est ce que Liminary:
Liminary est un outil tout en un de développement de jeux multijoueurs, orienté RPG (pour l'instant).
Il se veut à la fois robuste, facile à modifier pour un développeur accompli et facile à prendre en main pour un débutant.
Liminary se compose de 3 pans:
- une interface de création de jeu où l'utilisateur va pouvoir construire son projet (réaliser ses cartes, ses règles de combat, ses quetes, ses animations, sa GUI)
- un client graphique en 3d qui sera à fournir aux joueurs
- un système de serveurs de jeu
Le système de serveurs de jeu peut être décorellé du client graphique. En effet, il propose de communiquer en Binaire, XML et JSON. Il peut aussi fonctionner en mode TCP ou UDP.
Je travaille actuellement sur ce système de serveurs (les autres projets ne sont pas encore lancés).
Quelles sont les technologies utilisées pour Liminary?
Le système de serveurs de jeu est codé en Java; pour des questions de portabilité entre plateforme.
J'utilise Grizzly qui est une surcouche de Java NIO pour la gestion des entrées sorties.Et également Jackson pour la sérialisation/désérialisation JSON. Log4J pour la gestion des traces du système.
Mysql est utilisé pour la base de données.
Des tests automatisés sont écrit au fur et à mesure de l'avancée et tout est compilé avec Maven (en surcouche de Ant).
Il y aura certainement d'autres bibliothèques plus tard en fonction des besoins qui se présenteront.
Une première mouture du client se basera certainement sur les restes d'un précédent projet de RPG (Pentacles Mayhem) dont je retirerais tout ce qui n'avait pas été codé par moi/ n'est pas utilisable pour un client seul / et ajouterais ce qui manquait.
Il sera donc codé en C# et utilisera le moteur Truevision 3D 6.5 et FMOD pour le son. La librairie réseau reste à déterminer.
Ceci changera certainement dans un 2e temps (car Java d'un côté et C# de l'autre ce n'est pas des plus cohérents); mais l'objectif sera de pouvoir avoir un rendu exploitable dans des temps raisonnables et de conserver ce qui marchait.
Le studio de création en lui-même reste sur des technologies à définir (surtout en raison du choix de moteur 3D qui sera déterminant pour la finalisation du projet)
Il sera certainement également développé en Java.
Vue détaillée du fonctionnement du système de serveur
Le système de serveurs se présente comme suit :
Un Master Server qui gère toute les entrées dans le système, le changement d'unité logique (par exemple un changement de canal), la communication inter-serveurs, répertorie les entités actives (joueurs et serveurs) et gère la création des nouveaux personnages.
Un Data Server qui gère l'accès à base de données, les sauvegardes et récupérations d'informations; et fourni aux autres entités du système les informations dont elles ont besoin pour travailler.
Un ou plusieurs Map Server qui vont gérer les cartes du jeu, toute la logique de combat, les quetes etc.
Où est ce que j'en suis?
Mon travail actuel se concentre sur le point d'entrée du système (aka le Master Server).
J'ai commencé à coder une librairie utilitaire qui gère déjà la récupération des paramétrages, la sérialisation/désérialisation des flux et l'accès à la BDD.
Côté serveur pur, j'avais commencé à coder en NIO pur la création des sockets d'écoute, au final je suis en train de retravailler le tout avec Grizzly pour que ce soit plus simple.
J'ai commencé aussi des parties du Data Server, mais le résultat ne me semble pas si probant, il y aura donc certainement une réécriture.
Quand au client C#, je n'ai pas encore commencé la modification. Mais à l'époque il était capable de gérer les maps (propriétaire, arg!), le placement des bâtiments, les animations et déplacement des créatures et du personnage joueur, les cycles jours/nuit et l'environnement. Je pense que ces points évolueront peu (uniquement gestion de la commande à distance). Il faudra que je réécrive la gestion des ambiances sonores (réalisée par un autre dev) et que je retouche la gestion de la GUI.
Le plus gros morceau sera donc la communication client serveur!
La roadmap :
Je vais me concentrer surtout sur le Master Server dans les mois qui viennent.
Nomenclature des échanges interserver et avec les clients
Gestion des connexions clients et autres serveurs
Listing des autres serveurs actifs (pour permettre le routage)
Gestion de la création de comptes clients et de personnages
Gestion de l'authentification, du mode sans compte
Gestion des droits spéciaux (pour les comptes admins)
Sécurité du Master Server
Pour la suite, on verra quand j'en serais là!
Partager