Space PiouPiou V0.4 !

Une nouvelle avancée majeur vient de voir le jour … Cette version intègre sans contexte l’avancée la plus importante et celle qui m’aura demandé le plus de travail, de concentration et de réflexion. Paradoxalement, cela ne se traduit pas forcément en contenu, mais plutôt en évidences : « Pourquoi c’était pas comme ça avant ? » . Voici les versions :

Voici le changelog de cette version :

  • – Support complet manette XBOX One et PS4
  • – Support Clavier / Souris
  • – Une interface
  • – du Lore
  • – Un profile « Connectée » au net !
  • – Une sauvegarde des options
  • – Gestion de la langue Fr et En
  • – Un filtre graphique
  • – Des nouvelles armes
  • – Des nouvelles munitions
  • – Des nouveaux chats !
  • – Une stabilité générale accrue et des performances stabilisées !
  • – Support des résolution 1280 * 720, HD et Full HD

Au registre des nouveautés, avant d’avoir un billet dédié :

Ces grosses modifications sont parties d’un constat simple : « Sans interface, on comprend pas ». Je disais dans mon billet précédent que je voulais au maximum éviter de mettre une interface, vous m’avez dit en grande majorité ne pas « comprendre » ce qu’il se passait. J’ai donc revu mes idées et décidé non pas de « juste » créer une interface, mais de tout faire pour éviter de « ne rien comprendre ». Pour y arriver, je devais instaurer une chose aussi « simple » que le support de la manette ET / OU du clavier+souris, grâce au InputSystem V1.0.0 de Unity.
(Mal) Heureusement, il s’en suivi une grande réflexion. Les manettes actuelles disposent de 12 à 16 boutons, sans compter les sticks analogiques. Mon gameplay se basait sur la souris et le clavier, j’ai donc du repenser l’intégralité des comportements du jeu pour les adapter à la manette. Il s’en est suivi un constat simple : les joueurs n’auraient pas compris que certaines touches ne soient pas utilisées au vu du nombres d’actions dans mon jeu :

A gauche, un enum (liste finie simplifiée) des actions de mon jeu, à droite le mapping custom des actions sur les images et scripts associés. J’utilise un enum pour me référer à mes actions plutôt qu’à une string car c’est plus robuste : l’enum sera toujours le même, la string peut facilement être fausse. L’action est associée à 3 images : la touche pour faire l’action en fonction du controller utilisé. L’action peut aussi être switchée avec une autre pour un éventuel remapping des touches à l’avenir.

J’ai donc du réfléchir comment Aim avec le Joystick (car auparavant c’était un calcul entre la position de la souris par rapport au joueur), et j’ai alors imaginé un twin stick shooter classique : on vise avec le stick droite en tournant le stick comme si PiouPiou était au centre ! La position du stick correspond donc exactement à la position de l’arme. Et pour palier au soucis de « visibilité de là ou je tire » , j’ai rajouté un viseur rouge sur les armes. C’est simple : pas de viseur , pas de visée (on tire tout droit).

Avec le combo clavier + souris, on a un viseur qui indique ou l’on tire avec une arme ! Cela peut être un peu embêtant, mais le tir standard est avec la molette (Hérésie !!)

J’ai aussi imaginé équiper une arme avec un bouton, pour tirer avec l’autre (une évidence aujourd’hui). Equiper avec la même touche que tirer était contre intuitif à bien des égards. Le plus gros « changement » fut que le tir de base est désormais définitif. PiouPiou pourra toujours tirer des graines. Auparavant, équiper une arme supprimait le tir de base. C’est une évolution logique : avec autant de boutons sur une manette, un joueur n’aurait jamais accepté de voir des inputs inutilisés et perdre une capacité de surcroits (certaines armes ne tirent pas).

Tout est permis ! Tirer au double pompe + tir de base !

Maintenant, pour lier le tout, il m’a fallu une interface, un HUD. Un HUD (ou affichage tête haute) est un élément fixe et dynamique, qui synthétise l’état du joueur à un instant T, constamment. Il l’aide à comprendre toutes les informations d’un seul coup d’oeil. J’ai donc imaginé implémenté l’affichage des armes en fonctions des touches, la barre de vie et de score, et un menu pause ! Ce menu permet de mettre en pause (merci Obvious), de voir la description des objets (le Lore), des munitions, éventuellement les effets spéciaux (balles qui rebondissent, délai avant explosion), et de quitter le jeu proprement !

Un truc vraiment con, mais quitter le jeu sans devoir faire alt+f4, ne fut intégré qu’il y a peu … Il y a une explication simple : implémenter un moyen de quitter le jeu propre est pas forcément compliqué : créer un menu dans lequel on choisi un bouton qui lance l’action de quitter. En fait, c’est pas le truc qu’un dev pense à implémenter de suite, vu qu‘il jongle entre l’éditeur qui a un mode lecture / pause, et rarement des build (versions compilées, distribuées) utilisés par les joueurs. Le truc moins évident fut de mettre le timeScale (la vitesse d’écoulement du temps) à 0 pendant que le menu est ouvert, tout en ne désactivant pas toutes les animations, ni la detection des events. Je gère le menu pause par un Event, afin d’avoir une implémentation plus libre à l’avenir. Il faut voir un PauseEvent comme un « Appel » à voix haute de PiouPiou pour mettre le jeu en pause. Si le MenuManager « entend » le PauseEvent de PiouPiou, il fera tomber le menu pause. Effectivement, un Event lorsqu’il est lancé, est juste « écouté » par un Listener. Si le Listener est absent ou ne l’entend pas, il n’y a pas d’erreur (cela évite de gérer la nullabilité du MenuManager). Cela me permet par exemple de diriger PiouPiou dans des scènes qui ne nécessitent pas de menu pause (comme une map), sans changer 36000 lignes de code. PiouPiou criera juste « Pause » en vain. Quand PiouPiou appel le menu pause, il décrit aussi ses armes, d’ou les descriptions affichées !

pause_menu
Mettre le jeu en pause doit être l’occasion de se reposer et d’en apprendre un peu plus sur le reste du jeu. Cela sera grandement amélioré plus tard 🙂

Pour finir, la chosequi m’a vraiment, mais VRAIMENT pris le plus de temps, c’est la maniabilité à la manette dans les menus ! J’assure que c’est une vraie plaie. l’UX est une plaie, un gouffre de temps insondable. Je pense avoir passé 2/3 du temps de programmation sur l’intégration des contrôles à l’UX … Autant il faut parfois peu de choses pour rendre un menu sympa, , autant l’inverse est vrai aussi. C’est un travail ergonomique auquel je n’ai pas aimé m’attarder car je voulais tout simplement programmer du contenu. Mais c’est une tâche obligatoire malheureusement. J’ai du réfléchir à un menu pour :

  • Gérer les options
  • Se créer un compte
  • Se logger
  • Le tableau des scores
  • L’affichage des touches
  • Le menu pause aussi (en jeu)

Je vais pas rentrer dans les détails car c’était vraiment chiant, mais j’ai du coder un script maison. En fait, je ne sais plus exactement pourquoi mais la gestion des nouveaux Inputs n’est pas vraiment bien gérée avec les menus et les Canvas (affichage d’élement de menus spécifiques à Unity). J’ai du « lier » de manière visuelle les boutons entre eux dans l’interface (« aller en haut mène à ce bouton, aller à droite mène à ce bouton » etc … pour CHAQUES boutons), créer un script qui me permet de savoir sur quel bouton l’on est, détecter quel direction l’utilisateur entre, pour ensuite me rendre sur cet élément. L’inconvénient de cette méthode, c’est qu’elle n’est pas compatible avec une souris, et l’InputSystem ne me permet pas (ou j’ai pas compris) comment l’utiliser efficacement …
L’autre partie embêtante, c’est qu’un menu, surtout pour moi qui ait donné la possibilité de se connecter à un compte, n’est qu’une interface « entrée utilisateur ». Le travail derrière tout ça ne consiste qu’à récupérer ces données pour les traiter et les retranscrires. Et là dedans, y’a pas vraiment de fun, juste de la logique séquentielle. Heureusement que j’ai codé l’API moi même, ça c’était fun :).

main menues
Vous pouvez créer un profile stocké en ligne ! Les champs confirm doivent contenir la même information que le champ de base. Un message en bas vous indique si la création a réussi.
Une fois le profile créé, connectez vous sur le login !
Pour activer l’auto connexion, selectionnez « Remember me » et sauvegardez en appuyant sur save.

Du coup, pour mettre plus de « fun » dans tout ça, j’ai aussi recodé les Chaliens, j’ai fait un filtre graphique effet VHS du plus mauvais gout, j’ai ajouté un timer sur les rockets, et celles ci brillent avant d’exploser, j’ai stabilisé l’ensemble du jeu, j’ai rajouté des sons, des effets ça et là ! Et plein d’autres choses !

A gauche une arme « Pas mal », à droite une arme « oufgueudin » ! Y’a même un chatlien légendaire !

N’hésitez pas à me partager vos retours sur la google sheet dédiée : si il y a des bugs, ou des choses gênantes, j’en prendrai note. Sinon, vous pouvez aussi laisser un commentaire !

https://docs.google.com/spreadsheets/d/1MsF5uSifb4uAuANEz2asxnsPEIQ40vKeiz-vPRGPf1E/edit#gid=1386834576 (lien vers le googlesheet)

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s