Gladiamagus by Evury (Theme : Theater of Magic)

Pour la Pizza Jam j'ai choisi le thème "Theater of Magic". Ce thème m'inspire et peut m'exercer sur des mécaniques que je veux utiliser pour un autre projet. Ma crainte sur ce thème lié à la magie est de prendre trop de temps sur des animations.

Initialisation du projet

Je ferai les assets graphiques moi même car cette gamejam est assez longue et utiliser des assets déjà prêts ne me permet pas de m'exercer.
Pour la techno je pense utiliser un format web (sûrement HTML5 et javascript), ce format me permettra d'avoir quelque chose de visible sur ce projet quelque soit l'étape et de ne pas me soucier du déploiement du projet. Je suis tombé sur PixiJs dans une première recherche comme moteur graphique HTML/Js on va tester ça. Ça m'embête un peu car je ne récupèrerai rien du code javascript mais ça travaillera quand même la logique.
Je n'aurai pas le temps pour les musiques et sons, je vais donc piocher dans ma banque de son.

Ma feuille de route devrait ressembler à ça :

  • création des boards sur papier
  • définition des règles du jeu (lancement, déroulement, condition de victoire)
  • création des assets prototypes
  • setup de l'envirionnement
  • première scène
  • chargement des assets
  • boucle principale
  • application des règles du jeu
  • travail des animations
  • ajout de son
  • choix de la langue FR
  • travail de l'UX design
  • ajouter du contenu


Règles du jeu

Le joueur est dans un théatre de magie mais doit divertir le publique comme un gladiateur.
Ce sont des duels à mort entre deux mages. Le gagnant est celui qui reste en vie.
Les deux adversaires doivent lancer un sort en même temps, ces deux sorts vont se confronter et obtenir différents comportements :

  • plus puissant : le sort annule l'autre et inflige des dégâts à la cible.
  • s'annule: la combinaison créé une réaction mais ne touche aucune cible.
  • synergie : les deux sorts se complètent et atteignent les deux cibles.

Le joueur possède une base de connaissance qui liste chaque sort qu'il connait.
Au début du jeu il ne possède que 4 sorts : feu, eau, vent et terre.
Au début d'un combat sa base de connaissance est mélangée.
Lors d'un tour il n'aura que 10 secondes pour choisir le sort qu'il va lancé.
Il a le choix parmi les 3 premiers sorts de sa base de connaissance, c'est ce qui créé un roulement, le sort lancé revient à la fin de sa base de connaissance.
S'il ne choisi pas de sort dans les 10 secondes imparties il lancera un sort au hasard.

Quand le joueur à choisi son sort (ou à la fin du chrono), l'adversaire lance au hasard un des 3 premier sorts de son roulement. C'est au joueur de découvrir les différentes combinaisons et de s'adapter au roulement de l'adversaire.

A chaque fin de tour, le publique sera diverti. Son taux de divertissemernt dépend de ces facteurs :
  • % de vie restante des deux mages (ils veulent du sang)
  • les combinaisons de sort qui apparaissent sur la scène (plus il y a d'animation différente, plus les spectateurs seront contents)

Quand le joueur remporte la victoire il a le choix d'une récompense aléatoire :
  • plus de vie
  • plus de dégâts
  • un sort
  • un boost de sort
Avoir deux fois le même sort le fait apparaître deux fois dans la base de connaissance, donc plus de chance de tomber dessus.

Après le choix de la récompense, il récupère sa vie et passe à l'adversaire suivant qui sera un peu plus fort.

Le jeu n'a pas vraiment de fin, les combats s'enchaineront.


Devlog jour #1 (Dimanche)

J'ai fais quelques boards qui me donne une bonne idée de ce que je veux faire et j'ai rédigé les règles. Ça devrait être assez simple, je vais commencer avec peu de contenu car il y a des combinaisons qui multiplient le temps à passer dessus.
J'ai fais les assets de la première scène du jeu et j'ai setup le moteur graphique PixiJs. En lisant la doc en diagonale j'arrive à afficher les images et les modifier par frame comme je le souhaite. Je n'ai par contre pas encore vu la gestion des sons et des formats acceptés.
Ce moteur a l'air vraiment complet avec des groupes d'asset, une hiérarchie, des masques. Je n'aurai pas besoin d'utiliser ces fonctionnalités car le projet est bien trop petit mais il est possible d'étendre si je le continu par la suite.
Ma prochaine étape sera de tester la gestion des événements et surtout de voir comment fonctionnent les inputs.


Devlog jour #2

J'ai passé du temps à rechercher ou créer des assets. Pour les sons et musiques j'ai ce qu'il me faut. Les graphismes ont bien avancé aussi, je pense garder ces assets pour la version finale même si à la base je voulais juste prototyper.
J'ai vu dans la doc de PixiJs qu'il prend les sons au format mp3, j'essaierai de lui envoyer du wav ou sinon il faudra que je convertisse.
Maintenant que les assets sont prêt je vais pouvoir me conssacrer au code.
En partageant un gif de l'animation de l'écran titre j'ai eu des retours positifs et j'ai pu améliorer l'aniamtion suite à des conseils.


Devlog jour #3 #4 et #5

Je n'ai pas eu beaucoup de temps libre, le début de semaine était compliqué, c'est pourquoi je condense 3 jours dans ce paragraphe.
Pour terminer les visuels il me manque des animations qui me prendront du temps, je pense le faire un vendredi soir ou le samedi.
J'ai donc avancé sur le code, il y a la boucle principale, j'ai pu créer les classes et initialiser les valeurs par défaut des entités. Il me manque le système de combat et la scène de récompense.
Faire se projet en javascript m'aide pas mal, grâce à la console je peux bidouiller directement les Objet ou variables et voir le résultat directement à l'écran.

Il me reste 2 jours pour finir le code mais ça devrait aller, la fin de semaine est plus calme. Le samedi je travaillerai le visuel et je posterai le projet le dimanche matin.


Devlog jour #6 et #7

Sur ces 2 jours j'ai pu terminer complètement le code. Le jeu est jouable en entier.
Il me manquait 2 ou 3 sprites que j'ai fait vite et ne sont pas très beaux.
Samedi il me restera à faire l'intégration des sons, faire beaucoup d'animation et le menu des règles du jeu. Il est presque complété, si j'ai pas trop de mal à créer les animations je pourrai régler les détails.
C'est un grand soulagement de voir que le jeu est fonctionnel après avoir aligné plusieurs centaines de ligne de code, avoir réfléchi en amont m'a permis d'éviter pas mal de temps de debug et d'intégrer les fonctionnalités en une fois.


Devlog jour #8

C'est la panique !!!
J'ai du faire les animations au plus simple car je n'avais vraiment pas le temps de toutes les faire (j'ai même dû en sacrifier 2 ou 3). J'ai encore une grande marge de progression en graphisme.
J'ai eu un autre gros problème... Le moteur PixiJs ne gère pas le son ! Il existe un plugin mais n'était pas compatible avec ma version de PixiJs. J'ai pris une autre librairie de son, j'ai eu un peu de mal à l'utiliser mais le jeu a du son.
J'ai fait quelques parties, par contre je ne l'ai pas fait testé. J'ai constaté un bug d'affichage qui arrive sur les 3 premiers tours mais je n'ai pas le temps d'investiguer. Je pense que pour le reste ça fonctionnera bien.
J'espère aussi que le son n'est pas trop fort, je l'ai mis à 30% (dans le doute j'ai ajouté un bouton pour mute).
Il ne me reste plus qu'à publier le jeu sur itch.io !


Conclusion

Je suis très satisfait du résultat, le jeu est fonctionnel, j'ai pu faire quelques assets graphiques et tester un gameplay.
Comme la gamejam était sur une semaine (j'ai rejoins avec un jour de retard et pas disponible le dernier jour) je me suis dit que je pouvais trouver le temps de faire quelque chose et j'ai réussis à m'adapter rapidement.

Le moteur de jeu PixiJs est très simple à utiliser et l'interprétation de Javascript rend les tests unitaires faciles.
Mon code est très procédural et peu découpé mais assez clair pour ce projet.

Graphiquement j'ai pu me faire un peu la main et je suis content du rendu. Ça reste très simple, avec peu de détail mais c'est ce qui m'a fait gagné du temps.

D'ailleurs c'est ce qui m'a plu le plus dans ce projet, gagner du temps avec des astuces et sans avoir préparé d'asset. Le thème (Theater of Magic) se prête bien à un écran fixe, tout se passe sur la scène du théâtre.
C'est ce qui m'a permis de limiter le nombre d'asset, d'animation, de génération et surtout de physique (il n'y en a aucune).
Mon idée de base était de me baser sur un gameplay en particulier : 2 adversaires choisissent une action dans un temps imparti, ces 2 actions sont faites en même temps et une combinaison en résulte. C'est une base de gameplay que je travail sur un autre jeu.
J'ai donc pu allier le thème, la scène fixe et ce gameplay avec un genre de Shifumi++ qui évolue. Ça a été très fluide pour tout implémenter.
Pour la rejouabilité je me suis contenté d'ajouter des bonus à l'adversaire à chaque victoire et d'afficher le nombre de mage vaincu pour tenter d'obtenir le meilleur score.

C'était vraiment très fun et j'en tire que du positif. C'était aussi super de voir les projets des autres avancés et échanger (Formamac, Barbulinet, TompsonCode et Antonin), merci à eux pour l'engouement !