J'ai commencé à m’intéresser au développement de mods pour Kerbal Space Program peu de temps après le premier Mission Control Party du RADAR.
Pendant l'évènement nous avions rencontré des difficultés provenant des choix techniques fais par le développeur du mod Telemachus. En effet, nous n'arrivions pas à charger les interfaces web nécessaires pour le jeu parce que les clients dépendaient d'une version de jQuery téléchargée du Web. En plus, aucune des cartes ne fonctionnaient parce qu'elles se basaient sur des anciennes technologies. Malgré ces problèmes, le mod est essentiel à l'expérience; sans lui rien n'est possible. Je me suis alors dis que je pourrais enfin employer les connaissances que j'ai acquises pendant mon B.Sc.
Ça fait plusieurs années depuis que j'ai commencé à m'intéresser au modding de KSP. J'ai abandonné quelques tentatives infructueuses rendues plus difficiles parce que je refuse de toucher au système d'exploitation homonyme d'une ouverture dans un mur. Pendant les fêtes, le mois passé, lors de ma énième tentative, une étape importante a été atteinte.
Je suis maintenant capable de mettre en place un environnement de développement qui permet de compiler des mods sous linux !
Suivra des notes que je me laisse pour me souvenir de ce que j'ai appris.
D'abord, mon premier but est d'enlever toutes les dépendances inutiles de Telemachus. Une fois que ce sera fait, on pourrait peut-être étendre les fonctionnalités ou améliorer la performance du mod. Pour le moment, les dépendances que je crois pouvoir enlever tout en améliorant le mod sont : la librairie de Web Sockets (la librairie standard de C# disponible dans KSP—celle d'une ancienne version de mono utilisée par Unity, je crois—contient sûrement déjà des fonctionnalités pour Web Sockets), la librairie de traitement de JSON (encore probablement disponible dans la libraire standard), jQuery et la librairie utilisée par le front-end pour afficher les cartes. Pour y parvenir il me faut un environnement de développement. Il me faut pouvoir compiler le mod.
Ah ! Mais là se trouve un défi parce qu'il ne suffit pas d'installer dotnet et mono depuis son gestionnaire de paquets préféré puis invoquer dotnet build (de toute façon, c'est plus compliqué que ça compiler Telemachus). Non, ça ne fonctionnera jamais parce que les versions de dotnet qu'utilise ce mod ne sont pas supportées par la commande sous linux.
Nouveau défi premier : comment mettre en place un environnement de développement de mods pour KSP qui fonctionne sous linux tout comme sur d'autres systèmes d'exploitation.
Aujourd'hui, si on cherche à apprendre comment développer un mod pour KSP, on est redirigé vers un joli petit projet qui s'appelle KSPBuildTools. C'est rendu la méthode privilégié pour compiler son mod KSP dans dotnet. KSPBuildTools s'occupe d'aller chercher des références aux DLLs requis pour la compilation d'un mod KSP (notamment les fonctionnalités du moteur Unity et les références pour l'API de KSP). Il suffit d'expliciter où se trouve le jeu dans son système, puis KSPBuildTools s'occupe du reste au lancement de dotnet build. De ce que je comprends, c'est principalement ce qui permet au code source d'un mod KSP de se faire compilé sous linux et sous tout autre système d'exploitation ayant une version fonctionnelle de dotnet.
Après avoir appris comment ce système fonctionnait, j'ai réalisé que simplement adapter le code de Telemachus pour pouvoir le compiler sous linux était tout sauf simple. Une approche moins laborieuse serait de simplement tout réécrire le mod à partir de zéro.
J'ai suivi ce fantastique guide qui porte sur la mise en place d'un environnement de développement de mod KSP sous linux et suis maintenant prêt à affronter la réécriture du mod. De plus, j'ai tiré profit de nix-shell pour ne pas avoir à installer dotnet ou mono sur mon système (et pour offrir aux potentielles contributrices du mod les versions exactes que j'ai utilisé pour ces programmes). À l'intérieur du shell Nix, les dotnet build fonctionnent très bien :)
Maintenant, quant aux dépendances de Telemachus, j'aimerais mieux comprendre ModuleManager. Qu'est ce qu'offre ce mod, exactement? KSPBuildTools a-t-il des fonctionnalités pour faciliter l'inclusion d'autres mods KSP? Ce seront des questions pour un autre récapitulatif.
Pour conclure, voici le shell.nix que j'ai utilisé. J'espère mettre mon code dans un répertoire sur le codeberg du RADAR bientôt.
with import <nixpkgs> {};
mkShell {
buildInputs = [
dotnet-sdk_9
mono6
];
}
-Simon Janssen VA2SZM, co-responsable du RADAR