1 décembre 2018

Projet Game Design #4 - Démarrage sur GameMaker



Débutons donc gaiement ! Mais avant cela, fixons-nous des objectifs réalistes à court terme.

Créer un jeu de plateforme vu de côté nul, et un jeu de tir vue de dessus nul... Rien de forcément très poussé, mais je vais essayer de viser la qualité des jeux flashs un peu vides qu'on peut trouver sur le net. Mais en explorant diverses voies différentes dans la programmation. Car oui, il y a plusieurs manières de faire, et je vais pouvoir faire le tour avec ces deux types très différents.

Créer un point and click nul, ce qui se rapproche d'avantage du premier vrai jeu que je souhaite créer, et qui est en cours de conception théorique.


L'idée est de se faire la main, et de ne pas forcément passé des journées sur des détails qui font la différence entre un jeu amateur et un jeu pro. Si c'est un peu amusant et que ça fonctionne, ce sera très bien. L'intérêt est surtout dans la conception, et ça, j'improviserai au fur et à mesure.



Lancement de Gamemaker Studio 2




Nous avons donc une version d'essai gratuite et illimitée (Dans le temps) qui permet vraiment de tester le produit pour voir si on accroche au concept. Vous avez quelques limitations, comme par exemple le nombre d'objets (Ennemi, projectile, joueur...) qui est limité à 15, les sprites (Images) à 20, les sons à 10... Tout est expliqué ici.

Une version "Creator" à 39€/an vous permet d'avoir accès à TOUT (Hors publication, réservée aux PCs Windows), ou bien la version à 99€ illimitée sans abonnement, qui permet uniquement la publication sur Windows aussi. C'est donc ce que j'ai pris, après avoir constaté que le logiciel me parle.

J'effectue l'installation, la paramètre en anglais pour me simplifier la vie sur les forums et divers sites d'aides, et c'est parti pour se chercher un petit tuto pour débuter !



Le Tutoriel


Ça part très mal, car si le logiciel semble avoir des didacticiels intégrés, je ne parviens pas à les lancer. Et impossible de trouver comment faire sur internet. Je tombe alors par hasard sur une vidéo d'At0mium, un vidéaste pour qui j'ai beaucoup d'affection, et qui a un côté "humain" très prononcé. Mais j'en parlerai lorsque je ferai un article sur mes testeurs favoris.

Cliquez pour accéder à sa chaîne YouTube (Attention, ses vidéos tuto sont sur sa chaîne live). 

Bref, il a fait un tuto pour "créer son premier jeu vidéo" sur le même logiciel que moi, commençons par là.
"C'était il y a un an, un an et demi, ça commence à faire un petit peu de temps. Et maintenant, ce que je me dis, c'est pourquoi pas réapprendre de 0, puisque du coup j'ai quasiment tout oublié. Et quitte à le faire, et bien autant le faire ensemble, et peut-être que pour vous, ça vous donnera aussi l'envie de tester ça..."

Ses vidéos consistent à suivre le tutoriel officiel de Gamemaker (Payé par la société, sur leur chaîne YouTube) en live. Celui-ci propose également des images et sons qui seront utilisés dans les vidéos. C'est malheureusement en "GML", et donc d'avantage en code qu'en visual scripting (Avec les fenêtres), mais bon, tant pis. Disons que si je commence par un jeu de tir vu de dessus en GML, je ferai le jeu de plate-forme avec l'autre manière.



Si vous comptez vous y mettre aussi, je vous recommande donc deux méthodes différentes :

Si vous êtes pressé(e) et que l'anglais ne vous fait pas peur, vous pouvez suivre directement les tutoriels de Shaun, dont la durée totale est d'environ 1h40. Il explique clairement toutes les étapes et globalement, ça suffit largement.


Si l'anglais vous rebute un peu, que vous avez le temps, et/ou que vous ne voulez pas vous sentir seul(e) durant votre découverte du logiciel, vous pouvez regarder les vidéos d'At0mium qui suivent les tutos de Shaun, et dont la durée totale est d'environ 7 heures. Néanmoins, il a comme avantages :
  • Il donne des informations complémentaires, et propose de bons conseils.
  • Il utilise parfois d'autres méthodes.
  • Au pire des cas, vous pouvez sauter certaines parties des vidéos, et alterner entre les siennes et celles en anglais (C'est ce que j'ai à peu près fait, et c'était parfait).
  • Il va plus loin que le tutoriel.

C'est d'ailleurs l'un de ses conseils les plus importants ! Toujours aller plus loin. Et j'ai suivi comme je pouvais ce dogme, prenant de l'avance lorsque je comprenais quoi faire avant d'avoir les instructions, et améliorant les concepts de base pour les appliquer au jeu.

Par exemple : Pour éviter que nos tirs de mitraillette soit un laser continu, il faut espacer les coups de feu (On définit alors la cadence de tir). On nous apprend donc à coder un genre de compte à rebours entre chaque munition.


A chaque instant :
   Si touche "Tir" enfoncée : Créer un "Projectile"



A chaque instant :
   Si touche "Tir" enfoncée ET compte à rebours à 0 : Créer un projectile, relancer le compte à rebours. 



Amélioration possible même pour un débutant : Programmer plusieurs modes de tir, dont un "super tir" qui ne dure pas longtemps, et qui a un temps de recharge (Vu qu'on sait utiliser le compte à rebours). Le dernier a donc besoin de 3 comptes à rebours différents, mais ça finit par fonctionner.

On peut ajouter une petite variation aléatoire dans l'angle de tir en modifiant une seule ligne de code.

Ainsi, à chaque étape, on ajoute ses propres idées, on teste ce qu'on vient d'apprendre, et on finit par avoir quelque chose de fondamentalement différent. Et c'est le but !



Le développement d'un premier prototype


Première constatation : Tout est à faire. Vous avez un écran noir, et vous pouvez afficher votre objet, mais rien ne se passe. Si le logiciel permet de vous faciliter la vie en vous proposant une interface pour ajouter des images, créer des objets, les relier, définir leur centre de gravité, créer l'environnement, etc... Et bien, tout le reste est de votre ressort.

On commence donc par coder ce qui se passe quand on appuie sur une flèche, ce qui donnerait ça en français :

Vérification à chaque instant (Une page de l'objet est dédiée à ça) :
   - Si la touche "Droite" est appuyée, modifier la position de l'objet "Joueur" vers la droite de 4 pixels.


Ça peut évidemment faire peur, mais c'est déjà bien moins dramatique que commencer avec rien du tout. Le reste n'est en général que suite logique, où vous commencez par imaginer comment décrire l'action en français, et vous trouvez ensuite le code. Voyons pour un tir :

Vérification à chaque instant (Sur l'objet "Joueur") :
   - Si la touche "Tir" est appuyée, et que la cadence de tir le permet : Créer l'objet "Projectile" sous l'objet "Joueur".
   - L'angle du projectile est le même que celui du joueur.

Vérification à chaque instant (Sur l'objet "Projectile") :
   - Se déplacer dans la direction indiquée par l'angle.

Si collision avec un ennemi (Une page de l'objet est dédiée à ça) :
   - Les points de vie de l'ennemi baissent de 1.
   - Le projectile disparaît.

Pour l'instant, je n'ai utilisé presque aucun bouton dans la fenêtre de gauche.

Vérification à chaque instant (Sur l'objet "Ennemi") :
   - Si les points de vie tombent à 0 : Supprimer l'ennemi.

Vous souhaitez que ça crée un impact sur l'ennemi ? Rajoutez que ça crée une petite image là où le projectile disparaît. Et paramétrez sur l'objet "impact" qu'il disparaît rapidement en réduisant sa taille pour que ça fasse un peu animé.

Vous voulez qu'un ennemi mort laisse un cadavre ? Lorsqu'il disparaît, créez un objet "Cadavre".

Vous désirez que le vent dévie les balles ? Ajoutez simplement une petite modification constante de l'angle sur le projectile (Puisque comme vous le voyez ci-dessus, il se déplace dans la direction où il est tourné, il suffit de changer cette valeur).

Ainsi, petit à petit, on avance dans le projet. Et à part si on veut implémenter des fonctions réellement compliquées, ce n'est jamais insurmontable, car c'est toujours par petites touches. On se confronte rarement à un mur, mais le contourner peut prendre du temps.


Mais si c'est finalement assez simple de mettre en français, comment savoir le code à entrer ? Si le logiciel est finalement assez intuitif sur beaucoup de points, vous ne pouvez pas deviner toutes les différentes fonctions.

Eh bien, il y a peut-être des fonctions faites pour ce que vous souhaitez, mais il y a toujours différentes façons de faire. Et dans le cadre d'un apprentissage, ce n'est jamais perdu d'explorer ces possibilités.

Vous savez, je vous parlais de "comptes à rebours" pour mon "super tir". Gamemaker propose en fait un système d'alarmes qui simplifient énormément la chose, et j'ai modifié le code pour passer sous ce système. Néanmoins, j'ai appris une autre façon de faire, et maintenant j'utilise les deux techniques, selon leur contexte.



Que donne donc le fameux GML ?


Le GML est donc le langage (GameMaker Language) utilisé par le logiciel, et s'oppose à l'autre façon de créer des jeux : Le visual scripting, donc programmer sans écrire de code.

Néanmoins, beaucoup d'éléments seront gérés par le logiciel et ne nécessiteront pas de code, comme par exemple :

  • L'importation et l'organisation de tous médias (Images, sons, polices d'écriture...).
  • La création des environnements, l'ordre des différents niveaux, l'éditeur de niveaux...
  • Certains liens entre les éléments, comme rattacher un objet à une image.
  • L'animation (Même si je n'ai pas encore pu tester ça).
  • Et plein d'autres choses qui peuvent faire peur, comme la hitbox, le centre de gravité...

Le masque de collision peut également épouser une forme complexe automatiquement.

Dans le code en lui-même, vous avez énormément de fonctions déjà existantes pour faire à peu près tout ce que vous voulez, tant que vous ne révolutionnez pas le système. La vitesse, l'angle, la direction sont des variables prévues par GameMaker, et vous pouvez paramétrer les changements de direction avec tout un tas de formule, comme par exemple point_direction, qui permet de définir deux points, et donc un angle.

Pour faire qu'un ennemi va vers le joueur, on peut le résumer en trois lignes, comme ceci :

Et hop, vous pouvez aussi savoir comment coder un aimant !

Le code couleur est lisible (Vert pour une variable gérée par le logiciel, rouge pour un objet existant, jaune pour une fonction gérée par le logiciel...), et en entrant un mot, on vous proposera tout ce qui le contient, que ce soit des variables, des objets, un son, ou des fonctions.



Vous pouvez à peu près vous dépatouiller avec ça, mais vous avez sinon une aide pour comprendre en détail chaque fonction, ou une grosse communauté qui pourra vous aider. Mais bien que l'on trouve beaucoup de tutos en français sur le net, ça reste plus simple si l'on n'est pas rebuté par l'anglais.


Pour ce qui est du code en lui-même, on peut s'en sortir avec du très basique, à coups de SI, de boucles, de variables que l'on incrémente. Vous utilisez au milieu de ça les quelques fonctions que vous aurez retenu de GameMaker, et vous pouvez déjà faire beaucoup.

J'ai actuellement un prototype jouable avec 4 types d'ennemis, un super tir, une bombe qui fait des dégâts de zone, des changements de taille, des rebonds, et je pense n'avoir utilisé qu'une dizaine de fonctions de GameMaker. D'ailleurs, comptons-les, sachant que je compte pour un seul les fonctions d'une même famille (Comme "Vérifier si le joueur presse le bouton" et "Vérifier si le bouton est pressé").

keyboard_check (Pour vérifier les touches actionnées par le joueur)
mouse_check_button (Idem pour la souris)

audio_play_sound (Pour jouer un son ou une musique)
audio_sound_gain (Pour modifier le volume d'un son)
audio_sound_pitch (Pour modifier le pitch d'un son)

instance_create_layer (Pour créer un objet, et le "layer" pour définir sur quel plan)
instance_change (Pour transformer un objet)
instance_destroy (Pour détruire un objet)
instance_exists (Vérifier si un certain objet existe)

move_towards_point (Pour déplacer un objet vers un point)
point_direction (Pour définir une direction entre deux points)

random_range (Pour créer un peu d'aléatoire)

Comme vous pouvez l'imaginer, la plupart peuvent même se trouver simplement en écrivant le début et en choisissant dans la liste (C'est ce que j'ai fait pour mouse_check_button, par exemple). Il y a évidemment d'autres choses comme sinus, cosinus, valeur absolue, des choses que vous iriez chercher sur le net en 30 secondes quand vous en auriez besoin. 

Le reste est finalement du code basique.


Et si vous voulez tout savoir, voici ce qui se déclenche une fois que alarm[0] arrive à son terme :






Et pour alarm[1] :




Et voilà, vous avez votre super mitraillette, et il vous suffit de modifier à votre guise les 4 variables "cd_bonus, duree_bonus, move_speed_bonus et speedfire_bonus" pour en changer les effets. Selon votre manière de coder, vous aurez peut-être d'autres petites choses à faire, mais on est loin d'être devant quelque chose d'insurmontable. Pour peu que le langage vous parle un minimum, évidemment, mais ça s'apprend !

Plus que mon année en informatique en tout cas.

Tout ça pourra sans doute paraître compliqué si vous n'y connaissez pas grand chose, mais ça veut juste dire que ce sera un peu plus compliqué au début. Préférez suivre le tutoriel d'At0mium et vous trouverez vite vos repères. Ça reste tout de même infiniment moins complexe que ce que j'aurais imaginé avant de m'y lancer.

Le credo de GameMaker est que tout le monde peut créer des jeux, et c'est globalement vrai. Vous n'êtes même pas obligés d'aller aussi loin que moi pour commencer à vous amuser, ce qui rend l'activité accessible pour n'importe qui, même des enfants (motivés, quand même). Et encore, je n'ai testé que le mode censé être plus difficile !

Mais bref, concentrons-nous d'abord sur l'achèvement du prototype, dont je vous parlerai plus en détails dans le prochain article. Et certes, je mets beaucoup de temps, mais je suis loin d'être très souvent sur le logiciel (Si vous avez la motiv, vous pouvez faire beaucoup en peu de temps, finalement), mais je vous dévoilerai un jour ce sur quoi je travaille en ce moment.

-----------------
Précédent article : Choisir un logiciel

Article suivant : Mon premier prototype (En cours d'écriture)
-----------------

Aucun commentaire:

Enregistrer un commentaire

Haut de la page