
Sand-Box2D revient
Bonjour ! Aujourd'hui, j'ai recommencé à travailler sur Sand-Box2D.
Vous ne savez pas ce que c'est ? Attendez, je vais tout vous expliquer.
Sommaire
Bon, qu'est-ce que Sand-Box2D ?
C'est un jeu que j'ai créé en C++ avec la bibliothèque Box2D pour les calculs physiques. Je voulais simplement apprendre ces technologies ainsi que la bibliothèque SDL2 pour créer des fenêtres et y dessiner des éléments graphiques. OpenGL me semblait trop difficile à l'époque, j'ai donc décidé de rester avec le moteur de rendu de SDL2.
Après avoir cherché comment le faire, j'ai trouvé un petit projet en ligne de Simon Ranftl qui fait exactement cela. Il s'agit d'une petite application C++ pour Mac (la prise en charge de Windows et Linux est supplémentaire) qui utilise Box2D pour créer un environnement dans lequel une boîte tombe sur une plate-forme.
Après avoir mis à jour mon projet basé sur celui-ci, j'ai décidé de lui donner un nom et d'en faire un jeu, un jeu auquel vous pouvez jouer sur votre PC et PS Vita (plus tard, peut-être aussi sur appareils mobiles) nommé Sand-Box2D.
Je laisse ici un GIF du gameplay pour que vous puissiez voir à quoi ressemble le jeu (vous pouvez en fait voir celui-ci sur la parallaxe de la page principale) :

PS Vita ?
Ce qui m'a vraiment intéressé, c'est comment je pourrais compiler ce petit projet pour ma PS Vita. Après un tas d'heures passées à essayer de configurer correctement VitaSDK et à lier les dépendances (VitaSDK a Box2D préinstallé !), j'ai finalement compilé le fichier main.cpp
qui pourrait initialiser le moteur de rendu et me montrer le résultat. Je laisse ici la vidéo de ce même moment, le 24 août 2022 (elle a été enregistrée peu de temps après mon arrivée dans ma ville de résidence actuelle pour la première fois !) :
Depuis, je travaille sur ce projet en mode "Vita-first", c'est-à-dire que lorsque je travaille sur PC et que j'ajoute une nouvelle fonction, je dois d'abord lancer le jeu dans une fenêtre 960x544 (résolution d'écran PS Vita), puis compiler et lancer sur la Vita elle-même, et seulement ensuite travailler dans d'autres résolutions.
Pourquoi ça existe ?
Comme je l'ai dit auparavant, je voulais juste apprendre quelques bibliothèques C++. Mais quand j'ai regardé dans le fichier
main.cpp
fourni par Simon afin de savoir comment il utilisait les deux bibliothèques ensemble (SDL2 et Box2D), je n'ai pas vraiment tout compris. Le code avait des parties gonflées, il générait plus d'objets que ce que je voyais à l'écran (c'est pourquoi je me suis parfois heurté à des murs invisibles) et en général, la structure semblait trop lourde pour que je puisse la comprendre.
C'est à ce moment-là que j'ai décidé de créer mon nouveau projet basé sur celui-ci, en le refactorisant, en expliquant chaque partie du code et en supprimant autant que possible tous les éléments inutiles.
Et comme je l'ai dit plus tôt, après y avoir ajouté beaucoup de fonctions, j'ai décidé d'en faire un véritable jeu.
Qui y joue ?
Personne. Littéralement ! Je ne l'ai jamais publié et il est donc normal que les gens ne le connaissent pas. Au moment où j'écris cet article, le dépôt GitHub du jeu compte exactement 10 étoiles.
Système de blog : "Et si je fais la requête à l'API GitHub maintenant, le projet a... 11 étoiles. Le nouveau dépôt a cependant 2 étoiles. Cool, hein ?"
Qui va y jouer ?
Au fur et à mesure que je développais ce jeu, j'ai vu que je devais tout rendre modulaire : la disposition des niveaux, la gestion des pressions sur les boutons dans le jeu... Parce que sinon, tout serait codé en dur.
Lorsque j'ai déplacé des parties codées en dur du code dans un fichier séparé, en commençant à réfléchir à son format en JSON et à ce que je pourrais également y mettre, je me suis dit : "Attends ! Ce que je fais en ce moment, c'est créer un niveau !" - et oui, effectivement, j'ai créé un niveau. Tout un système de chargement de niveaux personnalisés pour être précis.
J'ai donc compris que mon jeu devait avoir un éditeur de niveaux et que je devais encourager les gens à l'utiliser et à publier leurs propres niveaux.
Mais ce qui s'est également passé, c'est que j'ai découvert qu'il était très simple d'importer des scripts Python dans un projet comme celui-ci. Cela signifie qu'à un moment donné, je pouvais exécuter un fichier Python important un module que mon application C++ exporte, afin de lui donner la possibilité d'appeler les fonctions C++.
Et du coup, je l'ai fait ! Sur PC et PS Vita (n'oubliez pas que le projet est toujours "Vita-first"). Si vous compiliez le jeu avec les bonnes configs activées, en cliquant sur le bouton Editeur niveau
, vous lanceriez en fait le script Python qui appelle la fonction C++ "jouer un son aléatoire" dans une boucle et fait ainsi un bruit fort. Je ne peux pas vous dire à quel point j'étais excité quand je l'ai vu fonctionner pour la première fois.
Ce n'est qu'un test particulier. Je souhaite l'implémenter dans l'édition de niveau elle-même pour en faire une utilisation vraiment intéressante. Vous pouvez voir l'idée du concept ici.
Donc, pour répondre à la question qui va y jouer : ce seront les gens qui chercheront une méthode pour s'exprimer tout en étant en route avec leur PS Vita entre les mains, en créant des niveaux mais pas seulement (on peut effectivement créer des niveaux dans beaucoup de jeux sur Vita), mais aussi la possibilité de les scripter avec Python, depuis n'importe où.
N'est-ce pas cool comme possibilité ? Quand j'étais petit, cela pouvait être ma chose préférée à côté d'autres choses que je pouvais faire en déplacement, comme à l'époque de Nokia Symbian. Ne saviez-vous pas qu'il y avait des téléphones à boutons qui avaient en fait un interpréteur Python et que beaucoup de logiciels étaient basés dessus ? Je le savais, je savais que je devais l'apprendre et c'est ce que j'ai fait. Beaucoup de projets utilisant AppUiFw : le remake du jeu "Asteroids" utilisant des formules sin/cos pour faire tourner la fusée quand j'avais 14 ans et personne ne m'a forcé à apprendre tous ces trucs mathématiques aussi tôt ; un petit jeu où il faut capturer les fruits du haut ; une application qui me permet d'utiliser facilement la fonction de synthèse vocale interne ; tout cela étant codé directement sur le téléphone sans utiliser de PC et de plus en plus... Mec ! Je suis vraiment assez stupide de ne jamais l'avoir sauvegardé ni partagé avec qui que ce soit ! Tout cela est stocké sur mon Nokia C5 qui m'attend dans ma maison à Marioupol, et je ne pourrai plus tout revoir avant des années à cause de la guerre.
Oh, désolé, j'ai un peu trop parlé. Il fallait juste que je dise tout ça quelque part.
Quoi qu'il en soit, vous avez votre réponse. Ce jeu est fait pour ceux qui veulent créer des trucs incroyables directement sur la PS Vita. Et pas seulement sur la Vita, si quelqu'un porte le jeu sur Switch (je n'en ai pas), ce serait sympa. Et Steam Deck si nous réussissons à sortir le jeu sur Steam.
Et alors ?
Alors, maintenant, je devrais juste faire quelque chose à propos de ce jeu.
Je vais commencer par refactoriser complètement le codebase (initialiser le projet à partir de zéro. Encore une fois). Cela me permettra d'utiliser toute mon expérience en architecture que j'ai acquise cette année et le jeu n'aura pas de problèmes obsolètes (par exemple ancrer tous les événements basés sur le temps sur les temps d'image. Cela signifie que le jeu ne fonctionne qu'à 60 FPS !).
Je m'assurerai qu'il fonctionne parfaitement sur toutes les plateformes auxquelles j'ai accès (Windows, Linux, macOS, PS Vita, plus tard probablement certaines plateformes mobiles), je m'assurerai que je ne dépends pas spécifiquement de SDL2 & SDL2_Renderer (pour pouvoir rendre le jeu avec GLFW & OpenGL ou Metal par exemple) et je pourrai créer son éditeur de niveaux basé sur le code du jeu lui-même. Cela aiderait beaucoup.
Voilà, je crois que ça explique bien ce que je vais faire. A la prochaine !