L'écran encaisse les coups
Jusqu'ici, un ennemi mourait proprement : il disparaissait, et rien d'autre ne bougeait. Il y avait bien l'explosion, mais je souhaitais faire encore plus. J'ai passé quelques jours à préparer ça. L'écran tremble maintenant sous les explosions, les monstres partent en éclats, et un éclair blanc apparait avant que l'écran tilt ;)
L'explosion qui fait trembler l'écran
Sur Chaos Engine, il existe des items, qui te permettent de générer une grosse explosion, permettant de tuer tous les ennemis présents à l'écran. Il fallait absolument cela dans mon moteur.
Du coup c'est chose faite, et c'est très fluide, à la fois sur STf et STe. La musique ne bug pas durant l'explosion, c'est exactement ce que j'imaginais.
La première chose que j'ai ajoutée est la plus simple à décrire : quand quelque chose explose, tout l'écran est secoué. Un choc sec, puis un rebond qui s'amortit en une fraction de seconde.
Il y a deux intensités. La mort d'un monstre donne une secousse franche. Un coup encaissé par le héros donne une secousse plus discrète, mais suffisante pour qu'on comprenne qu'on vient de perdre de la vie. C'est même l'effet auquel je tenais le plus : quand on se prend un coup dans le dos pendant qu'on vise ailleurs, l'écran le dit avant que le regard n'ait le temps de vérifier.
La gestion des particules
J'ai voulu intégrer la gestion des particules dans le moteur. On ne sait jamais les particules ça va forcément me servir.
J'ai passé plus de temps que prévu sur ces quelques morceaux de pixels, pour une raison que je n'avais pas anticipée. Ma première version envoyait les débris dans huit directions parfaitement régulières, à la même vitesse, sur la même distance. Le résultat ressemblait à un motif géométrique, une sorte de rosace, tout sauf à une explosion. Une explosion, c'est du désordre. Tant que chaque éclat partait exactement de la même manière, aucun réglage de vitesse ou de poids n'y changeait quoi que ce soit.
La solution a été de random, pour chaque morceau, sa direction exacte, sa vitesse et sa durée de vie. Et de leur donner des silhouettes différentes, parce qu'un carré reste un carré : une pierre n'a pas d'angles droits.
Deuxième leçon, plus amusante. J'avais donné aux débris un poids assez fort pour qu'on les voie retomber, sauf que ce poids écrasait tout : au bout de quelques instants, tous les éclats plongeaient vers le bas quelle que soit leur direction de départ. Ils n'avaient jamais le temps d'aller nulle part. Il a fallu doser la chute contre l'élan, ce qui parait évident écrit comme ça, et ne l'est pas du tout quand on regarde le résultat sans comprendre pourquoi il tombe à plat.
Tout cela se paramètre maintenant depuis une seule ligne de réglages par famille d'effet : combien de morceaux, quelles teintes, quelle vitesse, quel poids, combien de temps.
L'éclair, puis la déflagration
Ma première tentative déclenchait tout en même temps : le flash blanc, les explosions, la secousse. Le rendu n'était pas le bon.
La version actuelle utilise le step by step. Un éclair blanc couvre l'écran, brièvement. Puis, quand la lumière retombe, tout saute d'un coup.
C'est une chose que j'ai apprise en la ratant : la mise en scène d'un effet compte souvent plus que l'effet lui-même.
Sans rien perdre en route
Il y avait une contrainte au-dessus de tout ce travail, et elle n'était pas négociable. Ces effets ne devaient pas coûter une once de fluidité au jeu, ni sur le STe, ni sur le STf qui est de loin le plus serré des deux.
Et ma première version des éclats faisait justement perdre au jeu sa fluidité. Le réflexe évident aurait été d'en enlever la moitié, puisque personne ne remarque huit débris plutôt que quatre alors que tout le monde remarque un jeu qui saccade.
Sauf que le vrai problème n'était pas leur nombre, c'était ma façon de les dessiner. Ma première méthode notait ce qui se trouvait sous chaque éclat avant de le poser, pour pouvoir remettre le décor en place à l'image suivante. Ça marche, c'est ce que fait le jeu pour le héros et les ennemis, mais c'est cher : on met de côté puis on restaure une zone bien plus grande que le caillou lui-même, et ça se paie à chaque image et pour chaque morceau.
J'ai donc pris le problème autrement. Plutôt que de mémoriser le décor sous un éclat, je le redessine simplement là où il était, à partir de la carte du niveau. C'est une technique que mon moteur utilise déjà ailleurs, et elle est bien mieux adaptée à des objets aussi petits : rien à mettre en réserve, et quatre cases de décor à repeindre au lieu de sauvegarder puis restaurer toute une zone.
Le résultat, c'est que je n'ai finalement rien eu à sacrifier. Les huit particules sont là, et le jeu tourne exactement comme s'il n'y en avait aucun. J'ai quand même gardé huit comme plafond, parce que le double commençait à se faire sentir, mais c'est une limite de prudence et pas un renoncement.
C'est une leçon que cette machine me réapprend régulièrement : quand un effet coûte trop cher, la bonne question n'est presque jamais "combien puis-je en enlever", mais "est-ce que je m'y prends de la bonne manière".
La suite
La prochaine étape sera la lumière : une lanterne qui éclaire vraiment autour d'elle, dans un décor sombre. Et ça ce sera pas du gâteau ;)
Laisser un commentaire