AutomateMP
NieR : Mod multijoueur Automata
Avertissement
Ce projet est un travail en cours. Bien que certains aspects importants du jeu soient bien pris en charge, d’autres ne le sont pas. Ne vous attendez pas à faire (encore) une histoire complète avec quelqu'un avec ce projet.
Pour le moment, ce projet ne devrait être utilisé que pour la traversée et l'exploration de base du monde avec des amis, ou pour jouer dans la salle de débogage. La synchronisation des quêtes n'est pas encore implémentée. Certaines parties du jeu seront tout simplement cassées.
Caractéristiques
Serveur maître
- Permet aux serveurs d'être découverts par les clients sans connaître l'adresse IP au préalable
Serveur autonome
- Serveur codé en Go pouvant fonctionner sous Linux ou Windows
- Système MasterClient pour permettre à un "hôte" de contrôler le monde du jeu (ennemis et autres états du monde)
- Plus de 2 joueurs sont pris en charge, pas seulement joueur + copain
Forfaits Linux
Arch Linux (AUR)
- Version balisée
- Version Git
Synchronisation des joueurs
- Position
- Rotation
- Animations
- Tir de dosettes
- Programmes de pods
- Lampe de poche à capsule
- Sélection d'armes/de chargements (mais pas les types d'armes eux-mêmes)
Synchronisation ennemie
- Réplique les apparitions d'ennemis au fur et à mesure que le MasterClient les engendre
- Supprime les ennemis du côté normal du client qui ne sont pas censés être en réseau
- Position
- Rotation
- État de santé/vivant
- Quelques animations
Fonctionnalités prévues/voulues
- Changeur de modèle
- PvP
- Système de salle/lobby
- Système fantôme lorsqu'il n'est pas connecté à une pièce/un hall
Histoire
Mod qui a été développé en 2017 et a connu un développement très court avant de passer à autre chose. Ce n'était pas open source et a été publié plus tôt car les bibliothèques derrière la version originale n'étaient pas conviviales pour l'open source.
Comme il s'agit d'un code assez ancien qui, à l'origine, n'était pas destiné à être rendu public, les normes de codage ne correspondent pas à mon ensemble actuel. Veuillez pardonner cela. Cela peut être corrigé au fil du temps.
Fin août 2017
- Le développement a commencé
- Beaucoup de rétro-ingénierie
- Système de script (mruby ?)
- Système d'entité
- Système de copains
- Animations, boutons
- Ajout d'enet et d'enetpp, connexion de ces systèmes au multijoueur
- Le serveur était hébergé directement dans le mod lui-même, et non dans un programme autonome
- Client/serveur communiqué avec les données de structure brutes définies en C++
- Le système a utilisé des hooks VEH pour accrocher le milieu des fonctions et récupérer le contexte du CPU
Début septembre 2017
- Le projet a été abandonné, quelques courtes vidéos en action ont été enregistrées
2017-09-01_06-35-26.webm
Fin juillet 2022-présent
- Le projet a été relancé
- Une combinaison de NieR faisant la une des journaux, d'outils de modding publiés et de mon contact a stimulé la motivation ici.
- Supprimé tout code qui n'était pas compatible avec l'open source et tout remplacé par les équivalents open source
- Le code du serveur a été placé dans un projet Go autonome pouvant s'exécuter sous Linux ou Windows.
- Code client/serveur refactorisé pour utiliser des flatbuffers pour la structure des paquets
- Le nouveau système utilise MidHook de safetyhook pour effectuer des hooks de fonction intermédiaire et récupérer le contexte
- C'est beaucoup plus rapide et ne présente pas les inconvénients de ne pas être thread-safe
- La refactorisation du code client a commencé à respecter les normes actuelles et à mieux refléter la structure réelle du jeu.
- Lézard :
- Corrections de bugs de connexion et légère refonte