20 mai 2024

Game dev #02 : premier bloc de combat achevé !

 Salutations, voyageur !

C'est avec un plaisir non dissimulé que nous avons fêté ce wekk-end, la fin du tout premier bloc de programmation de Lampyre, dédié aux bases du combat et du déplacement.

 

Party haaaaaard *WUB WUB WUB WUB*

J'avais initialement prévu de pousser cette phase plus loin et d'implémenter immédiatement les détails avancés des combats (poison, armure, statistiques et compétences passives). Mais après avoir programmé ces bases, je pense qu'il est pour le moment plus sûr de commencer la construction des mécaniques principales du jeu (qui sont la construction du village et la gestion des alliés, je le rappelle).

Une fois que j'aurais un bon feeling de la boucle de farming et de purification des vyrrlins, je pense que je pourrais revenir parachever les détails des combats ! Mais en attendant, voici un récapitulatif de nos fonctionnalités implémentées depuis le dernier article :

- Station des créatures autour d'un point fixe. On demande à une créature de rejoindre un point défini, et oui ou non, de rester à ses alentours. Toutes les X secondes, si on le lui a permis, elle va vagabonder aux alentours de son point. Le timer de déplacement est légèrement randomisé pour donner un feeling un peu organique à l'attente. Si elle n'est pas attachée à son point d'ancrage, la créature se ballade librement sur la carte.

- En combat, les créatures maintiennent désormais une distance adéquate avec leur ennemi ciblé, selon leur arme équipée. Un attaquant utilisant des projectiles va essayer de maintenir un espace minimal entre lui et sa cible pour ne pas se faire toucher, et un adversaire au corps à corps va vous suivre de près.

De plus, une fois la distance adéquate maintenue, les créatures essaient périodiquement de tourner autour de leur cible, pour éviter qu'elles ne restent statiques comme des plots. 


 

- Perte d'aggro. Si une créature est "attachée" à un point fixe comme détaillé plus haut, et qu'elle entre en combat, elle ne poursuivra pas ses adversaires au-delà d'une certaine distance de son point d'attache. Cela permettra de donner des comportements de défense à des ombres ou à des animaux, et d'éviter qu'ils ne vous poursuivent indéfiniment. À noter que dans tous les cas, vous perdez l'aggro d'une créature si vous sortez de son champ de perception qui l'entoure.

 


 

- La fuite ! Des créatures peuvent essayer de fuir le combat en allant à l'opposé de leur adversaire si leurs points de vie sont trop bas. Mettre le slider à 100% de points de vie nous permet aussi d'avoir des créatures couardes qui évitent tout affrontement (certaines proies comme les lapins seront concernées).

 


 

- Aggro de groupe. Lorsqu'une créature rentre en combat, elle "notifie" ses alliés autour d'elle. Ceux-ci vont alors s'approcher de la source des hostilités (et donc, probablement rentrer en combat eux-aussi). Cela rend les engagements plus naturels, et évite de n'attirer qu'un seul ennemi, alors que six autres chillent un mètre plus loin.

- La parade. Même avec trois sphères dénudées qui se battent en auto-attaque, j'ai immédiatement vu que le combat au corps à corps exposait à trop de dégâts, même avec l'esquive passive. J'ai donc donné une chance aux créatures armées de parer, ce qui ne consomme aucune énergie et annule les dégâts. Certains types d'armes auront davantage de chances de parades que d'autres. Les statistiques et les talents auront aussi une grande influence sur le score.

Les armes "naturelles" (griffes, dents) n'ont typiquement aucune chance de parer. Les projectiles ne peuvent pas être parés.

- Instruction d'ordre aux alliés proches. Ok, je n'avais pas prévu de l'implémenter si tôt, mais je suis très contente du résultat. Lorsque le joueur est proche d'un autre vyrrlin, ce-dernier est automatiquement mis en "sélection" passive (petit icône à côté de lui), et peut recevoir des ordres. Répéter l'ordre sur le même vyrrlin l'annule.

Pour faciliter le commandement lorsque plusieurs vyrrlins sont côte à côte, le joueur peut utiliser la souris pour directement désigner le destinataire de l'ordre.

 


 

- Notre seul ordre actuel est le suivi. C'est probablement l'ordre le plus important du jeu. Les vyrrlins qui suivent une cible considèrent cette dernière comme un point d'attache ambulant, et ne s'en écarteront jamais trop. Le joueur peut s'entourer d'alliés pour aller explorer la carte et se battre. Ou bien désigner des patrouilles qui se déplaceront de façon cohésive autour d'un leader.

Il est vraiment important pour moi que les interactions avec les villageois vyrrlins soient fluides et instantanées. Pas de passage au travers d'un menu de dialogue. Vous demandez quelque chose à l'un de vos comparses, et il réagit (peut-être que s'il vous déteste assez, il ne vous écoutera pas, ça c'est autre chose). 

- Le dash pour le joueur. Bah ouais, je l'avais mis pour les PNJ afin qu'ils puissent bondir d'un mauvais pas, mais pas pour votre personnage principal. Problème désormais réglé.

Le dash dans Lampyre restera une mécanique très occasionnelle (contrairement à beaucoup d'autres jeux). Il est instantané et brise toute inertie de mouvement, mais il coûte de l'énergie qui pourrait autrement vous servir à esquiver. À utiliser pour sortir d'une AOE ennemie ou distancer un ennemi en urgence.



La grande victoire de ce début de développement, c'est la propreté du code et l'indépendance de ses éléments. Je peux confortablement lancer n'importe quelle scène indépendamment des autres sans erreurs. Les appels de fonction et les signaux sont économes, et juste appelés quand il le faut. La construction des classes me permettra de rapidement mettre en place le comportement général des ennemis et des créatures futures.

Le prochain bloc de développement s'articule maintenant autour de la lumière et de la corruption. Comme mentionné dans les articles passés, tout le but du jeu est d'évoluer sur une carte cernée par un voile ombreux. Le jour, la lumière contraint les ennemis à rester dans ce voile. La nuit, ils sortent des lisières et se déplacent librement, menant des assauts occasionnels. Utiliser de la lumière, la nuit, sous forme de torches et de lampes, vous permettra de protéger vos constructions et vos alliés en affaiblissant ces créatures (d'où le nom du jeu !! TOUT SE GOUPILLE). 

Les objectifs pour cette partie sont donc les suivants :

- Implémenter un score de corruption pour toutes les créatures, qui impacte leur réaction face à la lumière et au voile ombreux. La lumière les affaiblit d'autant plus durement que leur score est haut, et les fait fuir vers le linceul ténébreux en cas de luminosité trop grande.

Une créature non corrompue cherchera à sortir du voile ombreux pour se préserver (dans le futur, des escouades préparées s'y aventureront évidemment d'elles-mêmes pour aller détruire les autels de corruption).

- Implémenter un cycle jour/nuit rudimentaire pour indiquer aux créatures quel score global de luminosité règne à chaque instant. Prévoir un système qui aura dans le futur des saisons, des éclipses, des variations locales.

- Implémenter la zone de linceul d'ombre sur la lisière de la carte. Dans le futur, elle doit pouvoir se contracter et se dilater, ou perdre des morceaux lorsque des autels de corruption sont détruits. 

- Implémenter les premières torches, portées, ou fixes, qui émettent des lumières artificielles.

 

Ce bloc est peut-être plus modeste que le précédent, mais il pose les bases de notre système d'ombres critique à Lampyre. Et j'ai hâte de voir nos ombrelgins courir comme des dératés vers la ceinture de ténèbres, lorsque le soleil se lève.

Pour suivre plus régulièrement mes progrès sur le développement, je vous invite à me suivre sur Twitter (jamais je ne l’appellerai sérieusement X), où je poste des micro mises à jour et des clips tout au long de mon travail.

Je vous laisse, et je vous dis à la prochaine, lorsqu'un peu plus d'ombres régneront sur notre carte !



Aucun commentaire: