2 mois déjà!

Je ne suis pas mort du tout! Et encore moins démotivé à la tâche. Je code très régulièrement, mais pas sur « Bbobs » je l’avoue. Juste des petits soucis de planning IRL/code pour lesquels je vais devoir faire un point ici même dans les jours qui viennent. 🙂

Finalement, voici la première session de « gameplay ». Les guillemets sont de rigueur, mais par gameplay, j’entend que mes actions ont une influence sur ce qui se passe à l’écran.

Sinon… un peu de lecture sur des blog indies m’ont amené à beaucoup de méditation sur la méthode de travail. L’efficacité devrait en être revue à la hausse, mais c’est pour un prochain post.

Vrai vie, boulot, déboires avec Windows 10, il faut l’avouer, ça a été calme ces derniers jours. Mais mes premiers « bbobs » ainsi que mes (très, très moches) tourelles sont là.

Finalement, d’ici quelques lignes de codes, les tourelles feront feu. Les premiers instants de « gameplay » approchent donc… 🙂

Ces derniers jours ont été très instructifs. J’ai pas mal codé, non pas pour avoir du résultat, mais pour tirer de la compréhension, rendre mon code plus propre, le stabiliser…

Voici donc la « suite » de mon jeu à texture algorithmique diffusable par source, à ceci prêt que les textures ne sont plus algorithmiques et que le jeu ne sera plus diffusé par source. Ouais, j’ai tout juste dérivé, mais je ne m’interdit rien, tant que ça me fait avancer. Assez chipoté.

Ce sera donc un tower defense. Ca me permet de me mettre aux rudiments de l’OpenGL, d’utiliser mon pathfinding, ça promet d’être relativement simple à coder, et en plus, c’est plutôt fun à jouer. Basiquement, une série de monstres arrive par un point A pour sortir par un point B. Vagues après vagues, vous devez mettre multitudes d’armes sur leur chemin pour les empêcher d’arriver à bon port. Et si en plus, on pouvait construire des murs pour les obliger à faire des détours… hummm!

Je vous présente donc Bbobs. Blastable Blitter Objects!

Ne pas sortir des règles fixées dans le premier post est d’un compliqué que j’étais loin d’imaginer! Je m’explique.

J’ai commencé à tripper sur OpenGL grâce à PureBasic. C’était mon point de départ, faire un beau petit jeu avec ça. Seulement voila, très rapidement, je me rend compte que PureBasic supporte affreusement mal OpenGL, genre bloqué en 1998.

Qu’à cela ne tienne, je refuse de me prendre la tête, et PureBasic a son propre moteur 3D, basé sur Ogre, même si on exploite pas directement Ogre. Oui mais voila, au bout de 2 soirs de boulot, je me rend compte qu’il y a des bugs, qu’il manque pas mal de fonctionnalités essentielles, bref on exploite 10% de Ogre. Je veux pas faire mon chieur, mais l’alpha channel qui déconne, c’est rédhibitoire.

Alors voila, ce soir, j’ai finalement trouvé grâce à la communauté PB un moyen d’importer les libs OpenGL 4 dans Pure. Et ça y est, ça fonctionne! Donc soirée de code peu productive, mais finalement, j’en suis encore à me « trouver » mon environnement. J’ai failli craquer 18 fois et lancer un IDE C/C++, mais j’ai tenu.

Tout ça pour en tirer une conclusion et un constat:

– Je pleurais de voir le bordel monstrueux que c’était sur AmigaOs, entre les trucs pas supportés, les trucs supportés mais pas vraiment, les trucs supportés mais qui déconnent, à toujours courir après une lib pour régler un truc qui « normalement devrait fonctionner ». En fait, c’est un peu pareil sur PC (en tout cas, PureBasic). Ca doit être ça le métier de codeur.

– Je suis juste ***scotché*** des performances d’OpenGL sur un PC moderne. Je faisais un petit « bench » avec mon terrain en perlin. Je suis monté à ***33 millions*** de polygones, certes avec un blending assez simple et sans shaders, mais sans déconner: 33 MILLIONS DE TRIANGLES!!! … et c’est toujours à 60 fps avec les CPU/GPU qui glandouillent à 10%…

Content! Maintenant il faut vraiment avancer…

Aujourd’hui, j’ai écrit un générateur congruentiel linéaire de nombres pseudo aléatoires dont j’ai interpolé les résultats à différents octaves afin d’en tirer un bruit de Perlin dont je me suis servi comme Heightmap.

Ouais… Bref, j’ai fait un générateur de terrains à la con…

Non je ne suis pas mort, non je n’ai pas arrêté le code, bien au contraire, seulement, je n’aime pas écrire un article sans image. Voici donc un truc bien moche!

En fait, je trouve parfaitement rigolo, sur le forum de PureBasic, de pouvoir essayer les programmes des autres juste en faisant un copier/coller de leur source, dans une balise « [Code] », aussi longtemps qu’il n’y a pas de fichiers à télécharger.

Aussi voici l’objectif, totalement sans intérêt, totalement dénué de sens: Faire un jeu « [Code] », c’est à dire un jeu où tout sera généré algorythmiquement, sans fichier à partager, afin que le jeu soit diffusable sous forme de texte.

Le jeu sera… je ne sais pas. Un pacman, un space invader, un doom, un tower defense, peut-être qu’il sera tout ça et que jour après jour je changerais absolument tout, au gré de mes envies.

Voila. Ca ne sert à rien. J’aime.

Voilà un fier screenshot de ce sur quoi j’ai bossé quelques soirs: Un pathfinding. Un algorithme de recherche de chemin, ce truc qui me rendait complètement dingue quand dans Age Of Empires je voyais immédiatement mon péon partir dans la bonne direction quand je cliquais n’importe où sur une carte ultra complexe de 10km de côté.

Ici, le point vert est le point de départ, le rouge l’arrivée, les marrons les murs, et les noirs… le chemin emprunté!

C’est une bête application du A*, prononcez « A étoile », ou « A star », un algo finalement aussi connu que… simple! Ca ne prend pas plus de quelques heures d’avoir des premiers essais concluants, puis arrivent quelques subtilités: Par exemple, mon chemin traversait les murs obliques, quelques soucis là encore très connus de l’algo de base et très simplement solutionnés.

Notez avec quelle subtilité le chemin fait des « escaliers » lorsqu’il n’a pas le choix, puis s’écarte des murs à 45° pour emprunter la diagonale, plus rapide, lorsque la place le permet. Une avancée liliputienne dans le monde de l’IA!

Ce blog est là pour vous faire part du fruit d’une longue réflexion à un problème simple: Je veux reprendre le code.

Les bases sont posées: Mais ceux qui me connaissent un minimum savent que je reprend le code 3 fois par mois, sans jamais être productif, à la manière de ceux qui se mettent au régime toutes les semaines. Il faut que ça change. Aussi, depuis le début d’année, je médite à ces échecs. Est-ce un problème de temps, de motivation, de compétences, d’objectif? Il y a tant de facteurs…

Petit flashback: Il y a encore une dizaine d’années, j’étais encore un codeur réguler. Je n’avais peut-être déjà plus les bons projets ni les bonnes idées, c’était souvent peu productif, mais je codais à peu prêt tous les soirs, et à défaut d’avoir des logiciels à diffuser, j’avais des algos en stock, mais surtout, des compétences et de la motivation. A cette époque, j’étais à peu prêt à jour sur les techniques de l’époque et apte à coder mes envies.

Ensuite, il y a eu des changements…: Du côté « vie IRL ». Déjà j’ai fait le choix d’avoir un boulot qui n’était pas lié au code. Erreur ou pas, c’est un autre débat. Mais surtout, il y a eu des gros changements radicaux dans ma vie: Principalement l’achat d’une maison, qui, j’étais loin de l’imaginer, 7 ans plus tard, me tiens toujours loin de mon clavier. Cet achat a marqué, ou en tout cas accompagné, un gros déclin: Arrêt total du code, disparition totale de la circulation vis à vis de mes potes codeurs, honteux et lâche abandon notamment de l’un d’eux pour un projet un minimum ambitieux. Je m’en excuse sincèrement.

…qui on apporté d’autres changements: Et il arrive ce moment, plusieurs années plus tard où on veut s’y remettre, parce que ça nous manque. Et là, j’ai enchaîné les erreurs. Manque de discernement, avis non objectif sur moi même: J’ai voulu en reprendre où j’en étais. Reprendre sur des projets importants, sur les standards techniques actuels. Sauf que voila, ce n’est pas possible! Non seulement je ne suis plus au niveau, mais quand bien même, mes connaissances, mes idées, sont vieilles. Oui! Quelle bonne idée que de reprendre le code 7 ans plus tard en commençant par un clone de Legend of Grimrock! Je n’ai ni moteur 3D à jour, ni IA pour les monstres, ni moteur d’animation, pas même un petit algo de pathfinding, RIEN, mais allons y, faisons un jeu! Autant ces courtes reprises ont été frénétiques, avec une bonne dose de satisfaction personnelles, autant les gouffres à surmonter sont nombreux. Rapidement, j’ai baissé les bras. J’avais totalement perdu cette habitude des difficultés, et plus encore les moyens de les surmonter.

Alors que faire: C’est précisément là que porte ma réflexion. J’ai commencé avec Amos. Je n’ai l’ai pas lâché un seul jour pendant des années. Je codais absolument n’importe quoi, mais c’était pour moi, pour mon plaisir. Ca m’a amené à l’assembleur 68k, puis PowerPC, puis au C, et ce, dans une motivation totale et avec des transitions « faciles ». C’est le modèle, mon propre jeune modèle, que j’ai décidé de suivre. Je reprend à zéro!

Voilà: Me voilà donc sur PureBasic. C’est simple, c’est motivant, c’est créatif. De retour au bac à sable. Je ne vais pas tout déchirer, je vais coder tout ce qui peut me plaire, tout ce qui pourra m’être utile. Envie de faire un Pac man? Pac man il y aura. C’est la seule porte de retour concrète pour le long terme que j’ai trouvé. Et surtout, rester très humble, pour passer par la dite porte.

Ce blog est donc le blog d’un codeur. Pas un devlog, pas de suivi de projet particulier… Juste un suivi, régulier je l’espère, de mon retour au bac à sable. Et si j’ai un minimum de retours, ce sera toujours une motivation bonus.

Et surtout! La prochaine fois, je serais plus bref…