Devlog #08 - Pourquoi Mickey Mouse ?
Little Ryu Il y a 2 ans Premium Pro - Adhésion à vie2

Bonjour à toutes et à tous.

Comment ça va ? Bien ou bien ? Aujourd’hui, je vais vous parler de l’atelier « plateformer » sur lequel j’ai bloqué plusieurs jours car « nombreuses furent les difficultés » (à lire en imaginant la voix de Morgan Freeman). C’est parti.

*Quoi, c’est tout ? Et l’ambiance, alors ? T’as pas l’impression que tu signes l’une de tes pires intro, là ? Ah, tu manques d’inspiration ? Parce que j’ai l’air d’en avoir quelque chose à f(bip !)e de tes problèmes respiratoires ? Remboursez ! Comment ça, « c’est gratuit » ? Dans ce cas, donne moi de l’argent ! Donne moi de l’ar…

…GEEEEENT !!!

 

Parce que Mario Bros…

Quand j’ai débuté cet atelier « plateformer », j’avais deux objectifs en tête :

  1. Acquérir les bases pour développer ce type de jeux (ORLY?*)
  2. Améliorer la structure de mes codes

*So 2000…

Je précise que le second point était ma priorité car j’avais conscience que le code de mes prototypes, bien que fonctionnel, était loin d’être optimisé, et mon incapacité à aborder/comprendre l’atelier suivant, « créer une interface graphique en pur code », finira de me convaincre.

Enfin bref, après plusieurs semaines à développer sur PICO-8, voilà que je relance ce bon vieux ZeroBrane Studio (mes yeux ont, dès lors, récupérés six points chacun). Malheureusement, ces retrouvailles furent de courte durée car, très vite, je décide de l’abandonner sur le bas-côté, tel un animal domestique en pleine période estivale*, au profit de Sublime Text 3.

* « L’humour c’est subjectif, vous savez… »

C’est alors que je me suis lancé, à corps perdu, dans ce nouvel atelier, sans imaginer une seule seconde à quel point ce serait douloureux. Non pas que celui-ci soit plus compliqué que les précédents mais son côté un petit peu trop « tutoriel », combiné à l’absence de vidéos d’accompagnements*, demande un effort de concentration bien plus conséquent, d’autant plus que le support de cours distille énormément d’informations.

*Des vidéos sont bien présentes mais la plupart ne sont là que pour introduire les différentes étapes du support de cours.

Autre petit souci : l’atelier souffre de quelques « erreurs » qui ne m’ont pas facilité la tâche et qu’il est bon de signaler. Par exemple, à la page 30, on peut lire :

« Vous vous souvenez de la manière dont nous avons positionné le personnage, à partir d’un « P » dans la map ? Et bien c’est exactement la même chose ! »

Pourtant, impossible de me souvenir de cette « manière », et pour cause : le passage en question est tout simplement absent. ^^’ Idem pour la partie traitant du « Continuous Collision Detection » (CCD), que je n’ai pas su intégrer à mon code parce qu’il y a eu un oubli (et parce que je suis un peu nil, aussi) : la vidéo théorique nous invitant à suivre le support de cours pour la mise en pratique… quand celui-ci nous renvoi à la vidéo théorique.

« Pour le laissez-passer A38, il vous faudra d’abord le formulaire rose qui… »

Alors, j’ai bien compris l’importance d’intégrer un système de CCD dans nos jeux mais je ne parviens pas à comprendre à quel niveau du code il intervient.

Conclusion : malgré mon ressenti un peu mitigé (une première depuis que j’ai débuté la formation), cet atelier m’a tout de même permis d’atteindre les deux objectifs que je m’étais fixés et c’est le principal, n’est-ce pas ?

 

…et Bob l’éponge.

Voici donc le résultat de ces presque trois semaines de travail :

*Plutôt deux car je me suis mis en tête d’apprendre l’assembleur (ASM Z80) sur lequel j’ai déjà passé plusieurs jours. #mêmepaspeur

Cliquez pour agrandir.

 

~~~ SONDAGE SURPRISE ~~~

À la vision de cette image vous vous dites :

  1. Heu… lol ?

  2. C’est un jeu sur le communisme ?

  3. Je suis sûr que ça cartonnerait au Japon.

  4. Rembour…

…SEEEEEZ !!!

Soyez indulgents, les amis. Je sais que, de prime abord, ça ne paie pas de mine mais, en réalité, je me suis vraiment démené pour pondre ce prototype. Le code est bien plus structuré que celui de mes précédentes productions , il n’y a pas de bugs et je me suis même permis de faire du « hors-piste » en faisant les choses différemment de l’atelier (utilisation d’un canvas pour les tiles qui composent le fond et utilisation de quads pour les sprites).

Histoire d’éviter, encore un peu plus, les pièges du copier/coller, j’ai tenté d’améliorer les sauts (on gagne en hauteur quand on prend de l’élan) et j’ai utilisé ma propre réflexion en ce qui concerne la physique et les collisions entre sprites*. J’ai également apporté les modifications nécessaires au gameplay pour qu’il se rapproche d’un Mario : quand ils sont frappés, les blocs normaux s’animent tandis que les blocs « ? » changent d’état.

*Après comparaison, et même si ça fonctionne bien, c’est moins optimal de mon côté car je n’utilise pas la fonction CheckCollision().

Autres améliorations : le personnage dispose d’animations supplémentaires (freinage) en plus de se voir attribuer une variable « state » qui, si on lui affecte la valeur « super », lui permet de casser les blocs normaux. Cela m’a poussé à réfléchir à un moyens de modifier la structure du niveau à la volée car, une fois détruits, les blocs (symbolisés par un « B » dans la map) restent solides et deviennent des sortes de murs invisibles. J’ai donc mis en place la fonction ReplaceTile() :

 

-- pL et pC sont les coordonnés du bloc touché

-- pNew est sa nouvelle valeur dans la map (ex : "0")

function ReplaceTile(pL, pC, pNew)

   -- Variable tampon

   local line = ""

   -- On parcour toute la largeur de la map

   for n = 1, #lstLevel[1] do

      -- Si la position horizontale (pC) du bloc est la même que "n"

      -- On concatène la nouvelle valeur avec la variable tampon

      if n == pC then

         line = line..pNew

      -- Sinon, on concatène la valeur actuelle

      -- De la position verticale où se trouve le bloc (pL)

      else

         line = line..string.sub(lstLevel[pL], n, n)

      end

   end

   -- Enfin, on attribue à la ligne concernée

   -- La valeur de la variable tampon

   lstLevel[pL] = line

end

 

J’avais également dans l’idée de faire deux maps (une pour le fond, une pour les sprites) mais comme j’avais déjà expérimenté cette solution quand je codais le Super Bomberman, je me suis abstenu.

 

Titre interactif ← (Cliquez ICI)

Alors, comment je me sens après avoir suivi cet atelier ? Et bien, ma foi, ça va. Je suis un peu frustré d’avoir mis autant de temps pour en saisir toute les subtilités mais bon… je me dis que c’est le résultat qui compte alors je le vis plutôt bien.

Je vais quand même le pratiquer encore un petit peu histoire de rajouter les ennemis et les plates-formes traversables par le dessous avant de prendre ma revanche sur l’atelier « créer une interface graphique en pur code » et son initiation à la POO.

Une fois que ce sera bien ingurgité, je met de côté le LUA puis j’enchaîne sur les ateliers C# tout en continuant mon apprentissage de l’ASM Z80. Ce n’est pas dans mon tempérament de m’éparpiller de la sorte mais j’ai ouï-dire que ça permettait de progresser alors je me force.

 

Bon, et bien je crois qu’il est temps de nous quitter. Merci de m’avoir lu jusqu’au bout. Vous trouverez en lien une petite vidéo de mon prototype (ça faisait longtemps). Si mes Devlogs vous plaisent et que vous souhaitez m’encourager dans ma lente, lente, lente progression, n’hésitez pas à vous abonner à ma toute petite chaîne Youtube, à me suivre sur ma toute petite page Facebook (https://www.facebook.com/codernestpasjouer/) et à me faire un tout petit don de 100 000€ sur mon Tipeee*. Dieu vous le ren…

…DRAAAAA !!!

*Pour information : je n’ai pas de Tipeee. 😉 Ciao !

Comments (2)

Sympa ce petit devlog. J’ai eu les mêmes difficultés à suivre l’atelier sur le platformer et celui sur le GUI.
Perso je pensé commencer C# vers Noël, peut-être avant si c’est possiblé… j’ai vraiment hâte, je trouve que ce que font les autres élèves une fois passé sur C# est vraiment sympa.
Bon courage !

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.