En cours de rédaction
Peut-être d'un making of c'est comme un rapport de stage c'est vachement plus simple si on le fait en direct, mais souvent pas le temps. En tout cas cette fois on va voir si je m'y tiens.
Bon alors un jeu sur PS Vita c'est quoi ça ??? Un jour j'ai appris l'existence du portage de Godot 3 sur PS Vita et c'est resté dans un coin de ma tête, j'ai fini la jam de A MAZE et histoire de procrastiner mes autres projets, j'ai décidé d'enfin le tester. À la base je voulait juste voir à quel point c'était compliqué, à quel point ça marchait et me dire "wow cette scène que j'ai faite tourne sur ma vita". Mais en fait je me suis dis que ce serait un cool défi de faire un (petit) jeu complet. Je me suis donné à peu près un mois pour ça.
Peut-être c'est un peu cliché mais j'ai eu cette idée quelque jours avant de tester Godot-Vita en me réveillant le matin : "crier dans les couloirs d'OpenAI pour dire à Sam Altman d'arrêter". J'avais noté plein d'idée, et en les relisant maintenant, j'y suis resté assez fidèle. Il fallait que ce soit un FPS, qu'on ne tire pas des vrais balles mais des lettres/mots pour parasiter les IA. J'avais déjà l'idée de la fin, et le nombre de niveaux. Le but n'étant pas d'être un jeu qui allait révolutionner le FPS, mais une expérience drôle et cathartique.
Mais avant de me lancer à corps perdu dans du game design / code / level design, il me fallait définir mes contraintes. Et mes contraintes c'est surtout : faut que ça tourne sur PS Vita. J'ai donc fait pas mal de tests pour voir. Très tôt j'ai compris que mon énemis ça allait être les temps de chargements. De mon expérience de petits jeux sur Godot, les changement de scène a toujours été instantané, mais là une scène simple prenait une minutes à se charger et se mettre dans l'arbre !!!
J'ai d'abord fait des test pour savoir ce qui prenait du temps de chargement, un peu à l'aveugle, et bizarrement le truc plus significatif ce sont les lights. En avoir ne serait-ce qu'une seule rajoute bien 20s de chargement, enfin pour être exact c'est l'accrochage dans l'arbre qui prend ce temps, surement une sombre histoire de compilation de shaders. Après avoir donc décidé de n'utiliser les lights que si vraiment nécéssaire
Je reprend le projet après une semaine remplie par d'autres trucs. Au début j'ai essayer d'utiliser BlockBench pour faire mes niveaux, comme je l'ai utilisé pour le mesh du drone, mais c'était pas très pratique. Il fallait que je trouve autre chose.
C'est là que j'ai pensé à Celeste64 : je me souvenu que l'épique avait dit qu'iels avaient utilisé TrenchBroom, un éditeur de niveaux pour Quake, pour faire leur level design. Surtout qu'avec ce jeu je cherche à me rapprocher de l'ésthétique des vieux FPS, ça me paraissait donc assez adapté. J'ai téléchargé la dernière version et regardé un tuto, c'est en effet simple comme bonjour. J'ai donc décidé de l'utiliser.
La question qui se pose maintenant c'est de savoir comme importer les niveaux que je vais faire dans Godot, c'est possible de les exporter dans divers formats de fichiers, mais peut-être qu'il y avait encore mieux... Et en effet ! Je découvre le plugin Qodot qui fournit un node "QodotMap" à qui on passe un .map de TrenchBroom, on appuie sur "Full build" et le niveau est dans Godot !
C'était parfait, trop parfait, il fallait bien une petite difficulté : je suis sous Godot 3, le plugin n'est plus mis à jour et depuis 2 ans TrenchBroom a changé son format .map, le rendant incompatible. Je ne peux donc pas utiliser la dernière version de TrenchBroom, il me fallait revenir à celle de 2023. Le soucis c'est que les release sur github ne sont que en .deb pour les système Debian, il fallait donc que je le compile moi-même (je suis sous Arch btw). Soucis : une dépendance à un logiciel de build (vcpkg) me faisait échouer peu importe ce que je tentais. En désespoir de cause, j'ai pris l'exe Windows que j'ai mis dans Steam pour le faire tourner avec Proton ^^' ça m'a permis de commencer à faire des niveau et revenir plus tard à ce problème de compilation.
Nouveau problème : l'exe crash à la sauvegarde (avec corruption de données), très relou. J'ai donc repris les tentatives de compilation, j'ai trouvé une issue avec le même problème que moi : https://github.com/RobertBeckebans/TrenchBroomBFG/issues/5, finalement je réussi ! Je fais quelques tests pour voir si je repro le crash, et pas du tout, c'est parfait j'ai enfin un TrenchBroom à la bonne version pour Godot 3 et fonctionnel.
Il me reste u problème, mais que je contourne, sur PS Vita si un noeud QodotMap est présent dans la scène, le chargement sera infini. J'ai essayé de désactiver des parties du code lorsque c'est une build PS Vita, mais ça n'a pas marché, du coup à chaque export je passe sur chaque niveau pour décrocher le script du node. C'est fastidieux mais c'est mieux que rien en attendant que je trouve une autre solution.
J'ai deux bug de rendu avec la version 3.5.rc3 qui est distribuée sur le dépôt de godot-vita : dans un de mes niveau le fog complètement pété et reste fixe (trop bizarre ???) et j'ai des textures qui deviennent noire de manière random (notamment les barres de vie, ce qui est relou). Donc ça fait un moment que je voulais le faire, je tente une compil du dépôt en HEAD, c'est à dire en 3.7.dev. La première compil se passe bien, mais en fait elle a ignoré le SDK Vita parce que je ne l'avais pas installé et mis dans mon PATH. Deuxième compil ça se passe bien aussi. Le moteur se lance, je peux éditer tout va bien, arrive le moment d'exporter le VPK sur Vita et forcément j'ai pas le template. Je tente de juste renommer la version dans le template de la 3.5.rc3 mais bien essayé, ça ne pouvait pas être aussi simple :P Du coup j'ai un peu galéré pour trouver les commandes, mais au final je suis tombé sur le script de CI/CD du github qui les liste, parfait ! je compile donc le template, ça prend du temps, j'exporte, j'installe... le jeu se lance... j'ai le menu principal... je charge un niveau... et bloqué :( Le chargement n'avance pas. Serait-ce l'occasion d'essayer de faire marcher l'outils pour voir les logs de la PS Vita ?
Dans le message de release de la dernière version de godot-vita (2022), la personne qui maintien parle de PrincessLog pour lire les logs de la console. C'est censé envoyer les log via le réseau et on peut les lire avec un netcat, mais je n'arrive rien à recevoir :/
Bon du coup je repasse sur le 3.5.rc3 parce que j'ai un jeu à faire avancer, mais si j'ai le temps je ferai une scène de repro du chargement pour faire une issue.
TODO
Faut bien mettre les textures en lossless dans l'import sinon la PS Vita peut pas les rendre unshaded (???). Je suis en train de remplacer les porte à tirer dessus par un système de clés comme dans Doom sauf que c'est une Orb crypto machin à exploser contre un écran :P
J'ai mon premier crash ! Je crois que c'est à cause du mesh de vélo. En fait non c'était juste un très long freeze, je viens dévérouillé ma Vita et le jeu a repris, je testerai mieux demain, dans tous les cas il faut que je fasse un truc. C'était bien le mesh de vélo.