[FR/EN post]


C’est vraiment vraiment pas grand-chose, mais j’ai fait un petit jeu. C’est un jeu de tir en 2D dans l’espace, en scrolling vertical, sur Unity.

Vous savez peut-être que je vise la création de jeux vidéo comme activité professionnelle, en tant que sound designer. De fait, je me documente beaucoup sur des problématiques de création de jeux vidéo, et dernièrement j’utilise un peu de mon temps (que je devrais utiliser pour écrire des articles sur BSOL *tousse fort*) pour mettre les mains dans le cambouis.




↓ FRANÇAIS ↓ // → SKip to english version

Il ne s’agit pas pour moi de devenir le prochain développeur indépendant qui va faire un jeu à succès en travaillant tout seul dans sa chambre ; ce genre de cas me paraît être l’exception plutôt que la règle quand on se pose la question de la création de jeu vidéo. Non pour moi y’avait plusieurs buts :

  • Je voulais me replonger dans l’apprentissage d’un langage de programmation. J’ai commencé Python, j’ai fait un truc ou deux avec (à un niveau basique quand je regarde avec du recul), et ça m’a plu. Il se trouve qu’Unity tourne (non sans mal) sur mon ordi et que ce moteur utilise des scripts en langage C#. Ça faisait un moment que j’hésitais entre me lancer dans un nouveau langage ou approfondir Python, et finalement Unity a plus ou moins été un élément déterminant, du coup je me suis lancé dans C#. Et, spoiler : j’aime bien ça, encore plus que Python. J’en suis encore à un niveau d’apprentissage assez basique mais j’ai déjà presque rattrapé mon niveau en Python.

  • Je voulais me pousser à réfléchir un peu termes de design. J’ai avalé des heures de ressources d'analyses et/ou de vulgarisation du game design (majoritairement des vidéos, mais aussi des articles), ce qui me fait un petit bagage de connaissances. Mais y’a une différence entre avoir une vague idée de comment concevoir une expérience de jeu (aussi basique soit-elle) et actually faire un jeu, avec une ou des intentions de design derrière. C’est différent de savoir comment faire quelque chose, et actually l’exécuter en règle générale. Du coup je voulais voir où je me situais par rapport à ça.

  • Je voulais faire du sound design pour un actual jeu, et surtout l’intégration des sons de A à Z. J’ai déjà vaguement fait un peu de sound design, j’ai déjà pas mal assimilé les ressources d’apprentissage officielles du middleware audio Wwise pour intégrer des sons dans un jeu, mais j’ai jamais fait les deux dans un même projet.

Bref, je voulais faire des choses par moi-même (j’ai fait moi-même tous les assets sonores et graphiques, sans exception).
Je traine un peu sur /r/Gamedev et un truc qui y revient de temps en temps (et qui revient régulièrement dans un certain nombre de ressources sur la création de jeu) c’est la notion de premier jeu, et l’importance de le faire extrêmement simple pour ne pas échouer à le *terminer*. Si mon petit jeu est effectivement fort simple et terminé (il a plein de problèmes ceci dit), je ne suis pas sur de pouvoir l’appeler "mon premier jeu", parce que très concrètement j’ai juste refait le tutoriel officiel Space Shooter de Unity, mais de mémoire, en 2D (au lieu de 3D) et en ajoutant des fonctionnalités et améliorations (rappel : je voulais me mettre dans une situation où je réfléchis à l’expérience de jeu). En fin de compte mon jeu est devenu assez différent du jeu du tutoriel MAIS ça reste basé dessus, avec des fonctionnalités en plus. De fait, j’ai du mal à le voir comme mon premier jeu et ne l’appellerai pas ainsi (maintenant en vrai on s’en fout un peu).

J’en ferai d’autres. J’ai déjà ma petite idée sur le prochain que je vais faire.
Le jeu a un certain nombre de petit soucis (dont je reparlerai plus bas dans ce post), liés au fait que j’ai pas masse d’xp dans le domaine quoi. Mais il fonctionne et je pense qu’il retranscrit la majorité de mes intentions originelles.

Si vous avez une poignée de minutes à tuer et que vous voulez y jouer, vous pouvez le télécharger sur itch.io. J’aurai préféré un jeu jouable dans le navigateur mais j’ai découvert au moment de faire ma build que l’intégration des sons (une des raisons principales pour laquelle j’ai créé ce jeu) rend impossible la création d’une build webGL jouable sur navigateur. Cocasse.


Pour jouer, dé-zippez juste le pack où ça va vous arrange sur votre ordinateur et lancez le fichier .exe (sans toucher aux autres fichiers et dossiers).

Le but du jeu est de détruire tout les astéroïdes qui arrivent par le haut de l’écran. Les astéroïdes apparaissent par vagues successives, entrecoupées de quelques secondes. Vous disposez de 3 points de vie (HP) au lancement d’une partie ; vous perdez un point de vie chaque fois que vous vous faites toucher par un astéroïde (qu’importe sa taille), et la partie s’arrête quand vos points de vie atteignent 0.
Vous gagnez des points chaque fois que vous détruisez un astéroïde, et en perdez quand un astéroïde atteint le bas de la zone de jeu (ça ne vous fait pas perdre de points de vie).

Vous pouvez augmenter vos de points de vie en récupérant le bonus qui apparaît en haut de l’écran chaque fois que vous survivez à 5 vagues d’astéroïdes à la suite sans encaisser de dégâts ; qu’importe si des astéroïdes atteignent le bas de l’écran, la seule condition pour obtenir un HP bonus est de ne pas subir de dommage pendant 5 vagues entières.

Le jeu n’a pas de fin, visez le meilleur score ! Mais attention, au fur et à mesure que la partie progresse, le jeu devient de plus en plus difficile.
Lorsque la partie est terminée, vous pouvez recommencer en appuyant sur la touche "R". Attention il n’y a pas de fonctionnalité de sauvegarde des scores.


COMMANDES :

  • Utilisez les touches fléchées ←↑↓→ de votre clavier pour déplacer votre vaisseau spatial.

  • Utilisez la touche "X" pour tirer normalement.

  • Maintenez "X" et "C" appuyez pour tirer en mode "focus". En mode focus vous tirez beaucoup plus vite et avec beaucoup plus de précision, mais le vaisseau spatial se déplace au ralenti.


NOTES GÉNÉRALES :

  • La difficulté augmente au fur et à mesure que la partie avance. De la vague 1 à la vague 10, la quantité, la taille, la vitesse et la dureté des astéroïdes augmente. À partir de la vague 11, seul le nombre d’astéroïdes augmente.

  • Un HP bonus apparaît chaque fois que vous survivez à 5 vagues consécutives sans encaisser de dégât ; de fait, si la situation devient hors de contrôle vous devrez choisir entre privilégier la survie pour obtenir un HP supplémentaire (ce qui vous fera perdre des points), ou prendre le risque de perdre la partie en continuant à détruire tous les astéroïdes.

  • Les astéroïdes jaunes sont plus lents mais beaucoup plus résistants, ne les laissez pas s’accumuler pour ne pas être débordé.

  • À l’origine on tirait avec Ctrl et Alt, mais ça posait problème (je faisais encore mes builds sans son en webGL à ce moment là), donc j’ai voulu changer. Spontanément j’aurai choisi W et X mais ça pose problème si j’envisage de le faire jouer à des joueurs avec un clavier QWERTY, d’où X et C (qui sont communs au clavier QWERTY et AZERTY).



Sound design :

  • J’ai fait les assets graphiques avant le son, et vu que je suis nul en dessin j’ai fait des choses super basiques, de fait je me suis un peu limité sur le sound design : je ne voulais pas faire des assets trop élaborés pour ne pas avoir de dissonance audio-visuelle (imaginez des SFX cartoon sur un film blockbuster, maintenant visualisez l’inverse (remarque ça marche mieux dans ce sens là que l’autre, mais still)).
    De plus, je savais qu’une fois intégré dans le jeu j’aurai besoin de retoucher et de simplifier mes SFXs pour qu’ils soient facilement compréhensibles, qu’ils ne gênent pas la musique et qu’ils ne soient pas pénibles à écouter (typiquement, le son du tir en mode focus est extrêmement filtré dans le jeu par rapport à ce que j’avais fait à l’origine !).

  • À l’origine, j’ai créé le bonus pour dissuader le joueur de ne pas rester constamment en bas de la zone de jeu (c’est plus safe). Mais quand j’ai composé la musique et décidé de dédier une partie de la musique à la présence du bonus, je me suis rendu compte qu’on a tendance à laisser le bonus tomber jusqu’en bas avant de le récupérer, pour pouvoir profiter de la musique. C’est du mauvais design ; mon sound design et mon game design se marchent dessus. J’aurai pu procéder en rendant les canons plus puissants à faible portée, ou en augmentant la récompense obtenu en détruisant un astéroïde proche. J’ai bien ma petite idée mais ça fait appel à des notions de code que je ne connais pas encore bien.

  • La musique du bonus se joue actually en continu, mais est atténuée à un niveau inaudible tant qu’il n’y a pas de bonus à l’écran. Quand il apparaît, le niveau sonore de la musique du bonus fade-in en douceur et fade-out quand le bonus est récupéré ou atteint le bas de l’écran.

  • Tous les sons du jeu proviennent d’enregistrements maison.

  • J’utilise des random containers et du pitch (dans Wwise) pour essayer de créer des explosions qui ne sonnent pas identiques à chaque fois, mais le résultat est insuffisant. Il faudra que je travaille à créer de meilleures variations dans mon prochain jeu.

  • Au cas où vous auriez un doute, la musique du game over est absolument 200% inspirée de l'excellente « Determination », de Toby Fox.



Problèmes de design, bugs et améliorations possibles (que je ne règlerai jamais) :

  • Je ne sais pas encore comment gérer correctement la fenêtre du jeu. Elle est inutilement étendue. La position du score et des HP dépendent de la taille de la fenêtre, et sont devenus gênants à lire. Je ne m’y attendais pas, je chercherai absolument comment gérer ça dans mon prochain jeu.

  • La partie basse du vaisseau (les deux ailes blanches sur les côtés) pose problème car on peut s’y faire toucher, mais on ne peut pas la défendre.

  • Le décompte négatif des points quand un astéroïde sort de la zone de jeu fonctionne un peu comme il veut. Et des fois ça veut pas.

  • Mes courbes pour les vitesses des astéroïdes sont vraiment nulles. Il n’y a presque aucune différence entre un petit et un gros astéroïde du même type.

  • Dans mon prochain jeu il faudra que je cherche comment sauvegarder des scores.



--------------------------------------------------------------------

↓ ENGLISH ↓ // → Remonter pour lire le post en français


It really isn’t much, but I made a little simple game. It’s a 2D vertical scrolling space shooter, made with Unity.

You might know that I decided to get involved in making games for a living, as a sound designer. So I’ve eaten a good amount of resources about everything related to game creation and the many struggles that comes with it, and recently I’ve been using some of my time (that I should use to write articles on BSOL *loud cough*) to try things by myself.



I absolutely am not trying to be the next indie dev to make a hit by working alone in my room; this case is more an exception than a rule when we look at game makers. No, I did this for a couple of reasons:

  • I wanted to go back to learning to code. I’ve already learnt a bit of Python, done a thing or two with it (it was very basic when I look back at it), and it turns out I enjoyed it. Unity runs (painfully) on my computer and uses C# scripting. I’ve been hesitating getting back into learning to code for a while, but the perspective of working with Unity helped me make my mind, so I got into C#. Spoiler: so far I like how C# works better than Python. I’m still at an entry level but I’m almost caught up with my level with Python.

  • I wanted to see if I can think in terms of actual design and game experience. I’ve read and seen a lot of resources about game design so I have a bit of knowledge about how things should work. But knowing vaguely how to design a game experience (as basic as it can be) and actually making a game are two different things. Just knowing how something should work and actually executing it are two different things in general.

  • I wanted to make some actual game sound design and integrate it from beginning to end. I’ve already done some sound design here and there (mostly not for games), I’ve already worked quite a bit with Wwise courses to understand how to get a game to make sound, but I’ve never integrated sound I made in a game that was not already ready.

So yeah I wanted to do stuff by myself (I personally made all the sound and graphic assets, from scratch, no exceptions).
I’ve been reading /r/Gamedev for quite a while now and I noticed that there’s a topic that ends up being brought back to the table from time to time there and among other game developers : one’s first game, and how important it is to make it extremely simple so you can actually *finish it*. My game is actually pretty simple, and done (it has some design and technical problems though), but I don’t think I can call it my "first game", because it is based on one of Unity’s official tutorial; the Space Shooter. After finishing the official tutorial once I restarted and re-did the game again from memory (for practice purposes), in 2D (instead of 3D), and with new custom features and improvements (reminder: I specifically wanted to see if I can think in terms of game design and experience). It ended up being quite different from the tutorial BUT it is still based on it. It just has more features and custom assets. So I can’t really see it as my first game, and won’t call it that.

I’ll make more. I already have a good idea of what to try to make next.
It has flaws, I’m still a beginner but I’ll get better. What matters to me is that it seems to work properly and should offer most of the experience I initially intended to provide.

If you have a couple of minutes and are curious, you can download it on itch.io. I initially wanted to make a webGL player to play directly in your browser but when I was trying to build my game I figured the Wwise integration (for all the sounds) doesn’t allow for webGL build. I couldn't have made this one up.
Just unzip the thing wherever it you want on your computer, and run the .exe file (don’t touch anything else).


The aim of the game is to destroy all the incoming asteroids. They come in waves, each wave being separated from the next by a few seconds. You start the game with 3 Hit Points (HP), every collision with an asteroid will take you 1 HP (no matter its size), and if your HP reach 0 it’s game over.

Destroying asteroids will earn you points, and you’ll lose some for each asteroids that reaches the bottom of the screen (it won’t affect your HP).
Each time you survive 5 waves in a row without taking a single hit, a bonus will appear at the top : picking it up will increase your HP (not capped at 3, you can get as many as you want). It doesn’t matter if asteroids reach the bottom of the play zone in the meantime, as long as you don’t receive damage for 5 waves a bonus will spawn.

The game never ends, unless you die of course, so aim for a high score!  But the longer you play, the harder it gets.
When the game ends, you can restart by pressing the “R” key. Keep in mind I still don’t know how to implement saving high scores.


CONTROLS :

  • Use the arrow keys ←↑↓→ to move your spaceship.

  • Use the key "X" to shoot normal shots.
  • Press both the "X" and "C" keys to shoot in "focus" mode. In focus mode you shoot a lot faster and way more precisely but your ship will move slower.


GENERAL NOTES :

  • The longer the game, the harder it gets. From wave 1 to 10 the amount, the size, the speed and the hardness of the asteroids will keep increasing. From wave 11 there’ll only be more asteroids.

  • A bonus HP will spawn for each series of 5 waves cleared without taking a hit ; so if the situation gets out of control you’ll have to prioritize either your safety to get a bonus HP (which mean you’ll lose points by letting asteroids go down the play zone), or risking to lose the game by keeping shooting at all the asteroids.

  • Yellow asteroids are slower but way harder to destroy, don’t let them overwhelm you.

  • I originally intended to use the Ctrl and Alt keys to shoot (when I was still making soundless webGL builds) but it caused issues in a browser so I needed to change it. "W" and "X" would have been a great choice if not for the fact that "W" is not at the same place on QWERTY and AZERTY keyboards, so I picked "X" and "C" instead.



Sound design notes :

  • I made the graphic assets before tackling the sound, and since I’m bad at graphic arts I kept it very basic. So in the end I also refrained myself from making my sound effects too deep or complex : I wanted my visuals and audio to be coherent with each other (you can’t use cartoonish SFX in a blockbuster movie, and vice versa (though it works better with blockbuster SFX in a cartoon, but still, you get my point)).
    Also I kind of knew that when  I would integrate them in the game I would need to simplify my SFXs so they’re easy to understand, not fighting with the music and not annoying to hear all the time (the focus mode shooting SFX is strongly filtered in the game compared to what I originally made !).

  • I originally created the bonus HP to convince the player not to stay at the bottom of the play zone (which is safer). But when I composed the music and decided to dedicate a whole part of it to emphasize the bonus presence, I noticed that I got used to let the bonus fall to the bottom of the screen so I can enjoy the music. This is poor design. My sound design and game design are fighting each other. I should have just made the cannons so they’re stronger at close range, or you get more points for destroying asteroids when they’re close to you. I do have an idea of it would work, but it requires more code knowledge that I currently have.

  • The bonus theme actually plays continually, but is attenuated to oblivion while there’s no bonus on screen. When it appears, the music gently fades-in, and fades-away when it’s picked up or if it reaches the bottom of the play area.

  • All the sounds come from in-house recordings.

  • I’ve tried using random containers and pitching (in Wwise) to blend SFXs and create explosions that doesn’t sound exactly the same, but the result is a bit underwhelming. I’ll try to make better variations in my next game.

  • In case you’re wondering, yes, the game over theme is absolutely inspired by Toby Fox’s “Determination”.



Design flaws, bugs and possible improvement (that I’ll never do) :

  • I don’t know yet how to handle the game window. She’s uselessly wide, it messes with the HP and score display and make them annoying to read. I didn’t expect that so that’s absolutely something I’ll investigate in my next game.

  • The lowest part of the ship (the white wings) are annoying because they’re wide and part of the active hurtbox, but you can’t defend it because the cannons are above the ship.

  • The negative count when an asteroid exits the play zone kind of works when it wants. And sometimes it doesn’t want.

  • My asteroid speed curves are bad. There is little difference between a big and a small asteroid of the same type.

  • In my next game I’ll see if I can implement saving high scores.