A downloadable game

Préambule :

Il s'agit d'un "truc" pour la Super Nintendo, il faudra donc un émulateur pour le tester. Lors du développement, j'ai utilisé l'émulateur Mesen-S (donc je ne sais pas si les autres fonctionnent correctement pour ce "truc", mais normalement ça devrait le faire quand même).
Si vous souhaitez télécharger Mesen-S, c'est ici:
https://www.mesen.ca/

But :

Évitez de vous prendre les blocs gris, et survivez le plus longtemps possible.

Commandes :

Pour voler: Maintenir B (le bouton de la manette Snes, pas le clavier, ça dépend de votre config de l'émulateur).

C'est tout pour le moment, si vous mourrez faut faire un reset de la console manuellement XD. Aussi, au démarrage, vous tombez directement, donc soyez prêts (c'est aussi pour ça que j'appelle plus un truc, qu'un jeu).

La petite histoire pour cette Game Jam:

J'ai voulu me challenger pour cette Game Jam; faire un "truc" comme dirait David sans forcément que ce soit un jeu. Ça faisait quelques semaines que j'ai repris l'étude de l'assembleur pour la Super Nintendo et la Game Jam est tombée à point nommé. J'hésitais à participer à cette Jam en faisant quelque chose pour la Snes, mais un certain Duruti m'a dit "GOOOOOOOOO", alors je me suis lancé. Au final, même s'il s'agit plus d'un "truc" que d'un jeu, je suis content d'être parvenu à ça.

J'ai pas mal galéré pour différentes choses :

  •  Je voulais faire de tout petit test au départ et j'ai estimé à tort que je n'avais pas besoin d'un émulateur plus complet. Du coup, le tout premier émulateur que j'avais à la base, n'avait pas de débogueur : impossible de savoir ce qui n'allait pas lorsque l'écran n'affiche rien du tout. Je ne sais pas pourquoi j'étais resté buté autant de temps sur cette idée. Plus tard, j'en avais trouvé un, puis ayant des doutes sur des potentiels bugs (le problème était entre la chaise et le clavier hein), Duruti m'a trouvé un autre émulateur bien sympa qui se veut précis dans son émulation.
  • L'assembleur ... j'en avais fait à l'école il y a longtemps. Mais m'y remettre plus concrètement avec un véritable projet m'a montré à quel point j'étais rouillé. Aussi, je pensais mieux connaître certains aspects de l'architecture de la SNES, mais finalement bien moins que prévu.
  •  J'ai passé pas mal de temps à démarrer le projet véritablement. J'ai galéré au départ à avoir un écran de couleur unie, car je n'avais pas les bons outils et les bonnes connaissances au départ.
  • Ensuite, j'ai eu des surprises où le code vu par le débogueur était différent de ce que j'avais écrit. Des instructions en plus venaient s'insérer parfois entre 2 lignes de code que j'avais écrites. La plupart du temps, elles n'étaient pas exécutées sauf s'il s'agissait d'un break (ça foutait pas mal le bordel, je vous promets). C'était ma méconnaissance de l'assembleur et de wla-dx (le "compilateur") qui préconise l'utilisation de suffixe pour indiquer au niveau des mnémoniques, la tailles des opérandes et ainsi prendre les bons codes machines.
  • Également, basculer les registres en 8/16bits qui (en toute logique) a des impacts sur ce qui est lu et écrit en mémoire et je ne prenais pas ça en compte au départ. Quand on n'a pas l'habitude d'y prêter attention, ça foire souvent alors que la logique semble correcte.
  • Y a pas de nombre flottant ni de division ou de multiplication possible avec le 65816 (c'est possible de multiplier ou diviser avec la Snes tout même en utilisant des registres spécifiques etc.. mais c'est chiadé)

Malgré ça, je suis content, vraiment. J'ai réussi à faire quelque chose et j'ai réussi à résoudre des problèmes qui nécessitent une façon de penser différente de ce à quoi je suis habitué. 
J'imaginais aussi que les principes de la boucle d'init/update/draw ne s'appliquaient pas forcément dans le cadre de l'assembleur avec une architecture spécifique. En fait, si, tous les principes vus sur Gamecodeur s'appliquent de la même manière (l'implémentation change un peu par contre), et je ne sais pas pourquoi je m'étais mis ça en tête ...

J'ai une petite satisfaction personnelle, qui vient du fait que le 65816 n'offre pas d'instructions pour les multiplications et divisions. J'ai réussi malgré cette contrainte à trouver une solution pour résoudre un problème particulier en adoptant un point de vue différent.

Pour ce qui concerne le jeu, j'avais aucune idée de ce que je voulais faire (qui implique une inertie/gravité), mais genre 0. J'ai commencé par implémenter un sprite qui est soumis à une gravité, j'ai ensuite fait en sorte d'avoir un "jetpack" etc .. Je ne me suis pas pris la tête à sortir un jeu, mais j'en ai profité pour implémenter des choses que je voulais voir:

  • système de gravité et d'inertie (merci DeadSystem pour l'idée de "simuler" des nombres flottants)
  • limiter la vitesse de déplacement vertical
  • limiter le déplacement du sprite verticalement pour qu'il ne sorte pas de l'écran
  • détecter des collisions avec le décor en utilisant des hotspots (y en a que 2 pour le moment à la droite du sprite, en haut et en bas
  • implémenter une petite parallaxe
  • gérer du transfert via le DMA (Direct Memory Access) de la SNES


Mine de rien, c'était un rêve de gosse pour moi de faire ça, donc j'ai gagné :D :D :D.

Download

Download
super_flappy_square.sfc 256 kB

Leave a comment

Log in with itch.io to leave a comment.