15 août 2024

Game dev #04: et l'aventurier décida soudainement d'encombrer ses sacs

 Salutations, voyageur !

 


 

Nous voilà à nouveau ici, pour célébrer la complétion de notre quatrième bloc de développement de Lampyre, qui était dédié aux bases de l'inventaire et du ramassage d'objets. Le but était d'apprivoiser la construction d'UI (interface utilisateur) au travers de Godot, et de permettre aux créatures de transporter des objets sur elle (dans leur sac), ainsi que dans leurs bras !

 

 La note de patch

Comme pour les blocs précédents, les fonctionnalités se sont étendues un peu plus loin que ce qui était initialement prévu. Revoyons ce qui a été fait en une courte liste:

1) Et le loot fut créé: Les objets sont maintenant une classe à part entière dans Lampyre. Il peuvent être instanciés dans le monde du jeu où il tombent à terre, ou bien être passés comme information au travers du code (dans les sacs, les coffres, les tables de butin...). Ils ont un nom, un poids, une description pipou, peuvent s'empiler à plusieurs ou rester uniques. 

Comme dans de nombreux jeux où le butin est important, maintenir la touche ALT enfoncée affiche clairement le nom de tous les objets au sol autour de nous.

2) Un seul maître, pour contrôler tous les blings: Pour faciliter la gestion des objets instanciés sur la carte, ils sont regroupés sous un node gestionnaire commun qui s'occupe de leur création et destruction dans l'arbre de la scène. Par exemple, lorsque l'on souhaite supprimer le modèle d'un objet instancié de la carte, c'est ce dernier qui relaie cette demande par signal au master node, qui s'occupe de son cas. Oui, c'est un peu comme passer un post-it à un enfant, pour indiquer à son parent qu'il doit aller le noyer dans la rivière. Mais cela optimise l'instanciation des objets. Ne jugez pas mes systèmes infanticides.

3) Viens dans mon sac, ou viens dans mes bras:  Un objet peut être ramassé par une créature de deux façon : soit dans un sac, s'il est assez petit, et si la créature possède un inventaire. Soit il doit être porté, limitant les actions de la créature tant qu'elle l'a dans les bras. Tout le système d'affichage de commandes a été révisé pour permettre au joueur de ramasser les objets proches, soit en s'en approchant, soit en passant directement la souris dessus pour les sélectionner.

4) Do you even lift, bro ?: Chaque créature a un score de force qui détermine la quantité d'objets qu'elle peut porter dans ses bras, ou la taille par défaut de son inventaire. Cette statistique est limitée entre 0 et 10 pour les vyrrlins (de 0 à 100 kg portés dans les bras), mais techniquement, elle peut monter jusqu'à 20 pour les créatures les plus imposantes. La force permet aussi de calculer la rapidité avec laquelle une créature ramasse un objet lourd (entre 0,5 et 2 secondes selon le score et le poids de l'objet), mais aussi la pénalité de vitesse infligée quand elle est chargée. 

Porter plus de 70% de sa capacité en charge draine l'énergie (cela ne vous fait pas lâcher les objets, mais peut vous mettre dans une situation délicate si des ennemis vous abordent soudainement), et à 100% et plus, tout retombe au sol. Le joueur est averti de ces limites lorsqu'il passe sa souris sur des objets soulevables (instruction en jaune = va provoquer un drain d'énergie, et instruction en rouge = va tout vous faire lâcher).

Enfin, il est évidemment impossible d'utiliser le dash, d'attaquer ou d'esquiver en portant des objets. Prendre des dégâts a une chance sur deux de faire tomber un objet de la pile que vous portez. À tout moment, le joueur peut instantanément lâcher sa charge avec un raccourci.

En outre, j'ai fait en sorte que le choix d'auto-attaque soit mémorisé avant le port d'objet. Si vous aviez désactivé vos auto-attaques avant de commencer à porter des objets, vous conserverez votre mode passif en les lâchant, jusqu'à ce que vous indiquiez le contraire. Cela vous évitera de décocher une flèche malencontreuse sur un ennemi que vous tentiez de ne pas blesser.

5) Des sacs ! Plein de sacs !: L'interface pour tous les inventaires du jeu est fonctionnelle ! De loin la partie la plus chronophage (plus d'informations par la suite sur ce segment), je vous passe les détails à propos des comportements classiques d'une fenêtre d'inventaire de RPG ; sachez juste que toutes les créatures ont un inventaire par défaut, dont la limite en poids est à nouveau dépendante de sa force. Les structures comme les coffres ou les stations sont également des inventaires, manipulables comme nos sacs.

On peut déplacer les objets, les scinder, les organiser automatiquement, les rechercher grâce à un petit champ d'input. Les raccourcis sont toujours affichés pour ne jamais être perdu. On peut aussi balancer des objets dans la flamme éternelle de notre autel, ou carrément y jeter des piles d'objet lourds. Je souhaitais un moyen de se débarrasser de façon permanente des objets, mais je me voyais mal permettre au joueur de détruire des armes ou des armures en métal au milieu de nulle part - je trouve cette solution élégante, même s'il y aura des mécaniques de recyclage plus satisfaisantes dans le futur !

6) Ma passion pour les coffres et les tas de bois: On peut ainsi stocker les objets : soit dans des contenants, comme les coffres, pour les petits objets. Soit sur des stations adaptées pour les objets les plus lourds. Entendez par station, un endroit où ces objets sont stockés pour être protégés, et/ou emmagasinés pour servir à un autre but : des armes stockées sur un râtelier, des buches de bois qui attendent d'être travaillées à un atelier de menuiserie, un ballot de foin qui attend d'être mangé dans une auge de créature...

Le joueur peut facilement et librement récupérer ces grands objets de leur stockage, en les sélectionnant directement avec la souris.


Additionnel) G pa fé, déso: Dans la catégorie de ce que nous n'avons finalement pas implémenté, nous avons le message d'erreur global (dash impossible, inventaire plein...) car il n'est pas encore indispensable, et son adaptation future n'est pas complètement claire dans mon esprit. Et ensuite, la partie bonus où on devait essayer d'instancier un rocher pour le miner et récolter ses ressources: je suis en train de peaufiner les détails des systèmes de récoltes et préfère inclure ce bloc (haha ! LOL ! CE BLOC ! LA PIERRE, MAIS QUEL HUMOUR EDJ rFEDUH<) dans le prochain segment de développement. 


Le commentaire du développeur sauvage à propos du segment de dev

Je ne m'en cachais pas, et je l'ai mentionné en débutant cette phase de code: implémenter mes premières interfaces utilisateur sous Godot me faisait un peu peur. Je n'ai aucune idée de la tronche des outils UI sous Unity ou sous Unreal Engine, mais sur Godot, la principale qualité avancée par l'éditeur à propos de son interface UI est l'adaptabilité, via son système de containers intelligents.

C'est un peu comme si on vous demandait d'éteindre un incendie dans le Gard en vous promettant que la peinture rouge de votre lance à eau est faite avec des ingrédients bio-responsables: c'est super chouette, mais ça ne répond clairement pas à vos angoisses principales.

AKA, gérer les clics de l'utilisateur. Sélectionner et glisser des éléments. Provoquer des réponses dans la logique des contenants. Il n'y a aucun preset, ni filet. Il faut coder chaque réaction. Finalement, en progressant lentement, j'ai fini par apprivoiser la bonne hiérarchisation des nœuds de contrôle pour faire une belle UI adaptative (yay !). Mais aussi à comprendre comment me servir des signaux de ces contenants, et du focus de la souris qui passe au-dessus, pour créer une interface fluide à manipuler.

Même en sachant que je débutais sur l'UI, je ne m'attendais pas à ce que cette partie soit si chronophage. Comme pour de nombreux autres systèmes présents dans les jeux vidéos, c'est en codant qu'on se rend compte de la quantité phénoménales de normes et de règles implicites qu'une simple interface de sac se doit de respecter, pour ne pas frustrer l'utilisateur.

Tout pouvoir fermer en cliquant ailleurs sur l'écran ("barre-toi la fenêtre bordayl, je suis attaqué §§"). En appuyant sur échap. Ouvrir automatiquement le sac en même temps qu'un coffre, mais permettre de garder le sac ouvert en fermant le coffre. Appuyer une fois sur échap pour fermer les panneaux d'UI, une seconde fois pour le menu principal du jeu. Illuminer les icônes interactifs, au bon moment, et les griser pour ne pas induire le joueur en erreur lorsqu'ils sont inactifs.

Le design de l'UI est un travail à double-tranchant: lorsque quelque chose ne réagit pas comme vous l'attendez, vous le voyez (ressentez, même) tout de suite. Mais une erreur, ou un choix d'ergonomie malavisé, peut rendre un panneau immédiatement pénible à utiliser.


Une interface bien pensée transforme la gestion de ses ressources en un plaisir. C'est vraiment un but important pour Lampyre, que ce que vous exploitiez autour de vous soit agréable à manipuler, transporter, ranger. Des automatisations vous permettront de mettre vos alliés à contribution, en leur demandant de gérer automatiquement des stocks, ou de ranger de façon ordonnées tout votre fatras acquis lors d'une journée d'expédition. Mais cette quête de satisfaction doit commencer dès la besace de base du joueur, dont le contenu est ici manipulable de simples clics.

Ce système d'inventaire est là pour durer. Il va supporter tout le reste de nos mécaniques de fabrication et de récolte, et j'en suis très contente. Si l'on pourra sans doute y apporter des améliorations au fur et à mesure, les commandes actuelles sont robustes. J'ai pour le coup très hâte de faire un saut dans le temps pour arriver au moment où l'on pourra lécher son design final (ce n'est pas sale) et en faire quelque chose de BEAU, en plus de fonctionnel.

Parce que pour l'instant, bon. Il fait exactement ce qu'on lui demande, ok. Mais il a pas pris la peine de se changer après s'être occupé du barbecue pendant trois heures sous le soleil, si vous voyez ce que je veux dire.

 

Je peux d'ailleurs aussi fièrement proclamer que, comme attendu, ce bloc de développement est le moins *visuellement* impressionnant de tout ce qu'on a pu faire jusqu'ici, bien que ce soit celui qui ai prit le plus de temps à compléter.

Aucune surprise, et je ne suis pas du tout démoralisée par cet état de fait. Ce qu'on vient de faire était délicat, et un inventaire qui fonctionne bien va devenir un pilier pour le reste du développement.


Le rythme de développement est très bon, il s'est même amélioré au fil du temps. Je n'ai pas fait le compte exact des heures passées mais nous sommes certainement à plus d'une heure de travail concentré quotidienne (souvent supérieur à l'heure et demi en réalité, hors week-end où le nombre d'heures est démultiplié). Lampyre est maintenant une habitude consolidée, et j'essaie de profiter d'autres créneaux de temps chaque jour pour développer mes idées, et les visuels !


La suite

Nous quittons un instant nos sacs et nos tas de bois (oui ce sont des bûches dans ma tête, laissez-moi rêver :'|), pour faire un usage maximal des objets que nous faisons désormais tomber au sol. Aucune déviation du programme: nous allons nous attaquer à la création des principales sources de matériaux de la carte, et de leur récolte.

Le but est d'initier la récupération de bois, de minerais, et d'autres biens naturels sur la carte. Et de pouvoir progressivement débloquer les fonctionnalités du bloc suivants: la construction.

Les fonctionnalités visées, pour ce bloc numéro cinq, sont donc...

*tousse tousse*

- l’initialisation de l'arbre technologique du jeu: quelles ressources existent, dans quelles variations, et avec quelles caractéristiques importantes pour la construction et l'artisanat.

- la création et la répartition rudimentaire des biomes sur la carte de jeu (je précise que cette fonctionnalité a techniquement déjà été codée début 2024 et mise de côté, mais je vais devoir la réviser et être sûre que ses systèmes s'intègrent bien à la structure actuelle de mon code).

- l'apparition des ilots de ressource sur la carte, selon les biomes, à sa création. Optionnel: programmation de leur renouvellement (repousse des arbres, ré-émergence des pierres). Il est probable que je réserve la gestion de la croissance des végétaux pour la future partie cultivation !

- la récolte complète de chacun de ces types de ressources, réalisée à mains nues, ou à l'aide de l'outil polyvalent et unique des vyrrlins de Lampyre, provisoirement nommée serrepic. Inclut toutes les étapes à effectuer par le vyrrlin pour en extraire les matériaux obtenables SANS station d'artisanat.

 

Cette liste semble courte, mais ne vous y trompez pas, les techniques de récolte vont être un minimum interactives et différentes pour chaque grand type de ressource (j'ai dit un minimum, il faut trouver l'équilibre entre simplicité et superflu ; il n'est pas question d'enchaîner cinq QTE à chaque fois qu'on souhaite désosser un buisson).

Cette partie a également la particularité d'être un peu plus riche que les précédentes en matériel théorique, puisqu'il faut éviter de se planter lourdement sur l'organisation des ressources à gérer dans le jeu. C'est toujours à la fois excitant, et un peu angoissant de poser les fondations de ce genre de systèmes. Je prépare mes meilleurs organigrammes d'artisanat.



Les visuels du schnaps

Et maintenant, le fourre-tout visuel de notre récapitulatif, j'ai nommé les GIF de développement (issus des clips que je poste régulièrement sur twitter) !

 

1) Les premiers objets tombés au sol, et les premiers ramassages ! À ce moment là, il n'y avait pas encore d'inventaire. Je demandais juste à chaque pièce ramassée de disparaître dans le néant. 

Notez la sélection automatique de l'objet le plus proche, ou bien de celui survolé avec la souris (pour peu qu'il soit également assez proche pour être ramassé, bien sûr). Ce système sera appliqué pour la majorité des actions contextuelles du jeu, afin d'avoir des inputs fluides et rapides.

Appuyer sur ALT met en évidence tous les objets en affichant leur nom et leur quantité, comme dans tout bon jeu où le loot peut être abondant et/ou caché au sol (les Diablo, Baldur's Gate 3, et j'en passe des dizaines d'autres).


2) Première tentative de faire automatiquement regarder le modèle du joueur VERS l'objet qu'il ramasse. Sauf que ce dernier est par terre, et que notre modèle de vyrrlin provisoire est une patate géante. Donc... HEADBANG.


3) Pour correctement tester la gestion des commandes de proximité, j'ai balancé tous les objets à proximité de la flamme de l'autel. Sans survol particulier de la souris, c'est toujours la commande qui concerne le bâtiment qui prime (ici, allumer sa torche). Mais on doit toujours pouvoir sélectionner du loot tombé devant, avec le curseur de la souris, pour ne pas qu'il reste inaccessible.

 

4) Essai de placement d'un objet lourd dans les bras du joueur. Peut-être que je me suis loupée sur la première implémentation de la rotation de la charge. 


5) On porte des objets lourds en pile ! Yay ! Il n'y avait encore aucune pénalité de vitesse de déplacement à ce stade, donc on pouvait tranquillement courir pleine vitesse avec 35 kg dans les bras.

On peut sans problème transporter plusieurs types d'objets lourds à la fois. Ils forment un pile organique sur la créature. Seul compte le poids total pour déterminer ce qu'elle peut soulever.


6) Application de la pénalité de vitesse de déplacement quand on est trop chargé, ainsi que du drain progressif d'énergie quand on porte +70% de sa capacité (barre cyan en haut à gauche). 

Notre capacité de charge lourde n'a aucun rapport avec le poids de notre inventaire (sac à dos). J'ai souhaité mettre ce drain d'énergie pour ajouter une dimension de risque à se surcharger: si vous ramenez des ressources au travers d'un coin sauvage de la carte, s'accrocher à votre butin devient risqué si on vous attaque (un manque d'énergie signifie automatiquement moins d'esquives ou de dash disponibles).

Notez la commande contextuelle "carry" en surbrillance rouge, sur le dernier objet. La couleur indique que soulever cet élément va vous faire dépasser votre capacité de charge totale, et que vous allez tout lâcher par terre si vous persistez à vouloir le porter.


 

7) Le sac à dos du joueur, qui se remplit d'objets ramassés au sol. Les icônes placeholder jaunes, représentent un type d'objet qui est empilable. Clic du milieu sur ces piles les scinde automatiquement en deux. J'aime beaucoup ces actions de gestion simples, par clic, grandement inspirées de V Rising (d'autres jeux fonctionnent similairement, je n'en doute absolument pas).


8) Diviser les piles par deux est pratique, mais parfois insuffisant. J'ai donc développé ce mini-panneau accessible avec clic du milieu + ALT. Il permet d'indiquer la taille exacte de la pile que l'on souhaite obtenir, soit en la tapant, soit en cliquant sur les signes d'augmentation/soustraction de valeur. World of Warcraft utilise ce système fort pratique depuis longtemps.



9) Lâcher les objets en les glissant en dehors de l'inventaire. Rapide, pratique, indispensable.

La simulation physique, et l'apparition à une position aléatoire autour du joueur renforce cette délicieuse petite impression de chaos. J'imagine déjà avec des vrais modèles d'objets texturés.



10) La destruction d'objets ! Comme mentionné précédemment, je trouvais important de pouvoir détruire des objets de façon permanente. Mais pour ajouter une petite touche de roleplay, j'ai décidé de rendre ça possible... par la flamme de l'autel.

L'inventaire du joueur a donc cette option représentée par un icône de flamme sur sa gauche. Elle devient active quand on est assez proche de l'autel. Y glisser des objets les détruit de façon permanente ; un petit encadré vous décrit l'action lorsque la souris survole l’icône de flamme.


11) Le bouton de tri automatique. Un autre indispensable. Il réorganise tout le contenu de l'inventaire pour agréger les objets similaires, et rassembler toutes les piles isolées qui peuvent l'être.


12) La petite fonction de recherche intégrée à l'inventaire ! Elle ne fonctionne pour le moment que pour son propre contenu, mais on pourrait bien l'imaginer fonctionner pour les deux inventaires ouverts en même temps à l'écran. 

J'ai hésité à implémenter cette fonction pour le prototype, mais je la trouvais fort utile, même à des fins de débug (chercher des objets spécifiques dans un sac bien rempli, à l'aide). Et elle aurait définitivement existé dans la version finale du jeu, dans tous les cas.


13) Les premiers coffres ! Étant eux-mêmes des inventaires, ils bénéficient de toutes les fonctions qui ont été précédemment codées. 

Avoir son inventaire, et un contenant ouvert à l'écran, débloque deux nouveaux boutons : le transfert rapide (je balance tout dans l'autre sac), et le transfert que j'appelle "de complétion". Déjà présent dans beaucoup d'autres jeux, il vous permet de rapidement bouger les objets qui sont déjà présents dans l'autre sac. E.g, un coffre contenant des pommes. J'appuie sur le bouton, et toutes les pommes de mon sac y sont transférées. Les autres objets ne bougent pas.

Il y a un autre type de transfert automatique que je souhaite implémenter dans le futur : le transfert par catégorie. Vous pourrez définir un coffre comme un contenant spécifique pour une ressource ou un genre d'objet ("bois", "fruits", "soie", "tissus") et ce boutons rangera automatiquement tous les éléments de votre inventaire qui rentrent dans les conditions indiquées.

Déplacer un objet d'un contenant à l'autre ne demande qu'un clic droit.


14) Les dernières fonctionnalités implémentées: jeter des charges lourdes dans le feu de l'autel pour les détruire, et les stocker sur une station adaptée. Par station, j’entends tout bâtiment qui acceptera ces objets pour les conserver en sécurité, ou les utiliser pour l'artisanat ou la consommation.



Merci à vous de suivre mes pérégrinations logicielles ! Le prototype monte en puissance et on continue directement notre lancée dans les mécaniques principales du jeu. Je commence également à me chauffer pour produire des concepts et key art visuels, un peu plus attrayants que mes patates non-texturées qui portent des cylindres. Mais quand le temps est limité, la programmation prime toujours.

Vous pouvez me suivre sur twitter (@Ariatowl) pour avoir des nouvelles régulières du développement.

Prenez-soin de vous, à la prochaine !

30 juil. 2024

Revue de livre : Hyperfocus, de Chris Bailey

 Salutations, voyageur !

Nous nous retrouvons aujourd'hui pour une seconde revue de livre. Je vous avais parlé des bibles Deep Work (Newport) et Flow (Csikszentmihalyi), que j'espère bien avoir les balles d'acier, et l'esprit fougueux de présenter un jour sur ce blog. Mais j'ai récemment été surprise par un autre ouvrage relatif au bien-être : Hyperfocus, de Chris Bailey, publié en 2018.

Pourquoi surprise ? Je ne vais pas vous mentir, le domaine littéraire du développement personnel est un sous-bois, constellé à part égales de bouquets délicats de crocus printaniers, et de monticules de caca de sanglier. Si les deux vous promettent fragrances et graines de fleurs en abondance, je vous assure que vous préférerez mettre les mains dans le premier plutôt que le second.

Bon nombre d'ouvrages ont des prémices intéressants, mais sont ravagés par des promesses absurdes et un étalage d'axiomes philosophiques qui les rendent impraticables ou indigestes (coucou The Moutain Is You, de Brianna Weist, qui explique 150% de vos tares par des traumatismes sous-sous-sous-enfouis de votre vie antérieure inconnue et qu'il faut exorciser pour accomplir votre destinée épique), ou bien glacés avec une bonne couche de capitalisme américain et autres méthode magique pour gagner de la thune et devenir heureux, car avoir l'argent est bien évidemment un pré-requis du bonheur (non).

 

Merci, Brianna. Ravie de savoir que si je ne déterre pas mes traumatismes enfouis, je peux aussi bien me passer la corde au cou car je n'arriverai JAMAIS à faire mieux dans la vie, simplement en m'améliorant un peu chaque jour.

 

Pour être parfaitement claire, ces livres sont très populaires (tah le nombre d'évaluations Amazon), et je ne doute pas une seule seconde que beaucoup s'identifient aux descriptions qu'ils contiennent. Ils donnent sans doute une bouffée d'optimisme et de réflexions à un grand nombre de lecteurs (ce qui est toujours mieux que du jus de dépression). Mais je ne les recommanderai jamais à quiconque aurait besoin de conseils en développement personnel, surtout s'ils commencent leur recherche pour aller mieux ou progresser dans ce qu'ils aiment.

Toute cette bave verbale pour vous dire, qu'en téléchargeant l'extrait de Hyperfocus sur mon Kindle, je m'attendais à une autre compilation vague et moralisatrice ou à une nouvelle méthode infâme pour "changer sa vie ! OMG !! prenez une douche froide tous les matins et buvez de l'épinard broyé ! unleash ur productivity potential §§§".

ET BIEN PAS DU TOUT. J'avais tort, UNE FOIS DE PLUS.


Monsieur Bailey (béni soit cet alcool) nous offre ici une mise en lumière de l'attention, au travers de deux prismes principaux pour mieux évoluer dans sa vie : "l'hyperfocus" (comprenez l'hyper-concentration"), et le "scatterfocus" (la concentration "éparpillée", comme les M&M's que je viens de faire tomber sur le parquet parce que j'ai du beurre sur les mains).

 

Un bref résumé du livre

Comme son nom l'indique, Hyperfocus base tout ses préceptes sur la gestion de votre attention. L'ouvrage nous présente d'abord une représentation spatiale et imagée de cette capacité d'attention, une denrée limitée, mais cultivable, chez n'importe quelle humain.

Il se scinde ensuite en deux pour présenter un duo de modes de concentration, que l'on devrait apprendre à maîtriser pour avoir une vie riche et productive : l'hyperfocus, et le scatterfocus.

L'hyperfocus est un état couvert et étayé par de nombreux autres livres. C'est un état d'attention maximale et soutenue, portée sur une seule tâche, qui nous fait produire le maximum de ce que l'on est capable de créer en tant que singe évolué. Le planifier, l'encourager, l'entraîner avec la méditation, et éliminer un maximum des distractions qui peuvent nous dérailler de cette intensité mentale : les conseils sont variés, et bien qu'ils soient parfois redondants à d'autres guides (Deep Work, Make Time, Atomic Habits...), ils ont le mérite d'être présenté sous le spectre de cette capacité d'attention. Ce qui met en lumière certains leviers comportementaux invisibles dans les autres œuvres.

Le scatterfocus est pour moi le sujet le plus unique dans Hyperfocus. C'est un autre état d'attention, dispersé et régénérateur. Partout ailleurs, les auteurs mettent toujours en exergue la concentration soutenue. Elle se retrouve en opposition avec le fameux "repos" (au final rarement décrit autrement que "c kan on travay pa lulz !"), où il faut recharger son énergie, et ne pas consommer du contenu digital comme un maniaque. Mais quid de la créativité, et de ces moments où votre esprit bondit d'idées en idées, alors que vous regardez votre jardin avec un verre de thé glacé dans la main ? Ces inspirations, obtenues en marchant, ou sous la douche ? Monsieur Bailey appose un identifiant à cet état d'attention libre, opposée à l'hyperfocus, mais loin d'être oisif ou inutile. Vous laissez votre esprit rebondir entre les idées et les concepts, soit de façon libre pour capturer l'état de votre mental et planifier votre vie ; soit autour d'un sujet en particulier, pour générer des associations nouvelles et vous apporter des façons inédites de régler vos problèmes (et de créer !).

Cette définition du scatterfocus permet de mieux visualiser cet état alternatif à la concentration intense, et on se rend compte d'un seul coup qu'il est même nécessaire et naturel, quand on planifie notre vie, ou quand on a besoin d'idées innovantes pour un projet.

Le ton se veut pratique mais sérieux, bienveillant, et est étayé par de nombreuses études retrouvées dans d'autres livres de développement personnel - même si ici, leur quantité et leur pertinence sont un peu plus légères, et servent un propos un peu plus libre de la part de l'auteur (libre, mais qui s'entend plutôt bien).

Le maître-mot de l’œuvre est finalement l'alternative : une façon différente, mais très appréciable, de voir l'attention et la gestion de sa concentration au quotidien.

 

Bons points pour l'ouvrage:

 - clair et concis, ton neutre

- emphase sur l'adaptation et l'expérimentation personnelle

- prise de position plus nuancée et justifiée qu'ailleurs, sur le fait d'être multi-tâches (parfois, ça fonctionne tout à fait, mais pour des cas très précis et intentionnels)

- vision ludique et fraîche de la capacité d'attention

- on met le doigt sur un aspect privilégié à améliorer dans ses journées avec le scatterfocus : prendre du temps de réflexion libre pour capturer ses idées, et même poser les pré-requis indispensables à nos projets créatifs (là où l'hyperfocus n'est plus du tout adapté)

- bonne relecture, et bon substrat de réflexion, même si on n'adhère pas à toutes les idées

- très bon complément à d'autres livres traitant de la productivité et du bien-être

 

Défauts et points négatifs:

 - concepts et conseils parfois redondants, surtout pour sa dernière partie, et en ce qui concerne l'hyperfocus et la maitrise des distractions (si vous avez lu d'autres ouvrages de ce style, vous allez reconnaître plusieurs stratégies bien connues)

- inspirations parfois sorties du chapeau, ou très personnelles pour l'explication de certains effets ; toujours conserver sa bonne louche de critique avec soi

- ne traite pas vraiment le sujet du repos, ou des phases sans hyperfocus ni scatterfocus (impossibles à maintenir 100% du temps)

- bienveillant, mais apporte encore un propos malvenu et pas assez nuancé sur l'utilisation du temps libre : on dirait que si vous ne l'utilisez pas pour apprendre à coder du Python, ou pour avoir une licence d'économie, qu'est-ce que vous faites de votre vie, ololz ?? Passer du temps avec votre famille, ou vous allonger 45 minutes pour regarder un match de rugby dans la semaine ? MAI VOU ETE FADA OU KOI ?? BILEVESÉES INSOUTENABLES AAAAAAA-

 

À qui ce livre s'adresse t-il ?

En tant que graphiste, je souhaite conseiller cet ouvrage à toute personne qui a besoin de créativité dans ses activités (pas forcément de la peinture ou de la narration hein - ça peut être de la stratégie, du développement, de la gestion d'équipe...). 

Même si vous avez l'impression d'avoir une bonne capacité de concentration, et de bien museler vos distractions, la description du scatterfocus m'a aidée à retrouver ce processus qui existait déjà dans ma vie, mais qui avait tendance à être écrasé par l'hyperproductivité : se poser confortablement devant un tableau, une forêt, une place fourmillant de vie. Et réfléchir de façon détendue à notre journée, ou à notre projet en cours. 

Ce qui ressemble à de l'oisiveté, est en réalité une étape cruciale de tout processus créatif. Vous ignorez naturellement les distractions inutiles pour cultiver vos idées et votre personnalité. Et vous ne reviendrez à votre bureau que gonflé d'inspiration et d'énergie, pour progresser, et atteindre vos objectifs.

J'ai redonné une place de choix à ces moments dans mes journées, pour imaginer en détail l'univers de Lampyre et ses mécaniques. Ce travail de réflexion libre me permet d'innover et de construire un monde original à vitesse folle ; comme je le faisais quand j'écrivais des nouvelles à tour de bras, il y a quinze années. L'état de fait parait très idiot à constater. Mais quand on met trop d'emphase à travailler le nez collé à l'écran ou à la table, on en oublie que des fois, il faut regarder l'horizon pendant une heure comme un demeuré pour produire des idées géniales.

Prenez soin de vous, à la prochaine !


21 juin 2024

Game dev #03: second bloc de lumière terminé !

 Salutations, voyageur ! 

Nous faisons des progrès ! J'ai l'enjaillement infini de vous annoncer que notre second bloc de développement de Lampyre, concernant les bases de la lumière et de la corruption, est achevé ! 


 
Ce meme est si vieux, et le ressortir me fait grave plaisir.

 

Comme pour le bloc précédent, nous avons finalement implémenté bien plus qu'attendu. Pour clarifier le billet de développement, je vais d'abord faire une liste compacte de nos nouvelles fonctionnalités, et je détaillerai un peu mieux chaque catégorie par la suite.

 

 Carte :

- le sol de la carte peut désormais être instancié avec une taille dynamique (hauteur et largeur, des dimensions éminemment complexes §§).

- l'autel central du joueur, sanctuaire et condition de victoire, est désormais instancié en plein milieu.

- le mesh de navigation, pour le pathfinding des créatures, se calcule correctement sur tous les modèles bloquant le passage à l'initialisation de carte (et plus tard, s'actualisera au placement de nouveaux bâtiments ou obstacles).

Cycle jour/nuit et temps :

- le temps passe, et nous avons maintenant un soleil et une lune qui traversent le ciel de façon dynamique.

- le soleil, dés qu'il atteint un certain angle, produit un score de lumière allant de 0 à 200, et est passé à toutes les créatures de la carte via un signal, pour leur indiquer que le soleil brille.

- la nuit, dont la durée est indépendante à celle de la journée, permet l'apparition de la luminosité de la lune. Comme pour notre vraie lune, la position et l'intensité de la lumière lunaire sont indépendantes à la progression de la nuit (phases lunaires).

Score de corruption :

- chaque créature possède un score de corruption allant de 0 (totalement pur) à 100 (totalement corrompu). S'il est trop haut, ce score entraîne des pénalités croissantes quand la créature est éclairée. À 100 de corruption, une lumière de 25 inflige des pénalités de vitesse de déplacement, de régénération d'énergie et de distance de dash. À 40, des pénalités sur ses scores d'attaque (dégâts, vitesse, portée). À 50, elle commence à subir des dégâts. À 65, elle reçoit des dégâts supplémentaires de toutes les sources et enfin, à 80, elle est forcée à fuir vers une zone couverte par les ombres pour se protéger. 

Tous ces effets sont augmentés avec le score de lumière reçu (soleil + lumières artificielles). Un score de corruption inférieur à 100 atténue la quantité de points de lumière reçus (et leurs pénalités).

- les vyrrlins passent au travers de plusieurs seuils de corruption et de pureté. À moins de 15 de corruption, il est considéré pur. Entre 15 et 35, voilé. Entre 35 et 65, teinté. Entre 65 et 85, sombre, et au delà de 85, il bascule en égaré (un vyrrlin ténébreux et incontrôlable). À la sortie de leur purification (< 85), les vyrrlins sombres parviennent à marcher au soleil sans prendre de dégâts, mais subissent toutes les autres pénalités en journée.

Pour le moment, la corruption n'est acquise qu'en allant dans une zone de linceul d'ombre. À terme, les combats avec les créatures ombreuses en infligeront aussi des petites quantités. Tout le principe du jeu est de sortir des vyrrlins de leur frénésie ombreuse, pour en faire des villageois, et alliés. Mais certains bonus apportés par la corruption pourront peut-être vous faire reconsidérer l'idée de totalement purifier tous vos semblables...

- pour refléter la corruption des vyrrlins, leur modèle change d'aspect et de couleur selon leur degré d'ombre.

- le score de corruption du joueur est affiché sur l'interface générale.

Linceul d'ombre :

- la map est maintenant entourée de quatre lisières d'ombre permanentes. Ce linceul bloque totalement le score de lumière du soleil, et empêche aussi les créatures corrompues d'être bloquées par des lumières.

- les autels de corruption étendront encore davantage ce linceul autour d'eux (les patchs d'ombre procéduraux sont déjà codés et fonctionnels). Tout le but du jeu sera de détruire ces autels, pour libérer la carte de leur influence.

- les créatures ombreuses fuyant le soleil sont capables de rejoindre automatiquement la zone d'ombre la plus proche. Une fois à l'intérieur, elles essaieront de ne pas en sortir. Si un ennemi hors de portée les attaque depuis l'extérieur du voile, elles se réfugieront au centre de la zone ombreuse.

- les créatures non corrompues éviteront tout linceul d'ombre, sauf si ordonnées du contraire. Elles sont capables de sortir d'une zone d'ombre par le point le plus proche.

Lumière :

- les lampes ont été implémentées. Fixes ou portées, elles augmentent le score de lumière reçue pour les créatures présentent dans leur rayon.

- de plus, et pour instaurer un blocage spatial plus fort, toutes les lampes ont un niveau (tier) de luminosité, allant de 0 (nul) à 3 (absolu). Le périmètre de lumière d'une lampe bloquera toute créature ombreuse n'ayant pas la résistance requise pour passer. Par exemple, les ombrelgins ont une résistance à la lumière de 0, et sont bloqués par toute lumière de tier 1 ou supérieur. 

- lorsqu'une créature se baigne dans l'influence de plusieurs lumières, c'est le score le plus haut qui est retenu (elles ne se cumulent pas).

- en combat, les vyrrlins essaieront de se battre dans le rayon de lumières proches et d'attirer les ennemis à l'intérieur.

- les lampes consomment passivement une ressource, pour l'instant non nommée (mais ce sera de l'enduit inflammable, de qualité différente selon le tier 1, 2 ou 3 de la lampe). Si la ressource s'éteint, la lampe n'émet plus de lumière et ne peux plus être rallumée.

- les vyrrlins peuvent porter une torche en main secondaire, qui une fois allumée, se comporte exactement comme une lumière fixe.

- les lampes ne peuvent pas être allumées par magie, elles doivent recevoir un feu à l'aide d'une torche. Elle-même allumée à l'aide une lampe existante. Il est par contre toujours possible d'éteindre sa torche, ou toute autre lampe fixe, en effectuant une courte action contextuelle.

- l'autel central du village arbore une lampe inextinguible de tier 2 (elle ne s'éteint que si l'autel est détruit, et cela est synonyme de game over).

Additionnel / technique :

 - changement du visuel provisoire des créatures (plus épuré et permet une meilleure visualisation de leur orientation dans l'espace).

- amélioration du visuel de réception de dégâts. La teinte rouge représente toujours une perte de points de vie, mais un effet violet indique maintenant des points de corruption reçus, ou à l'inverse, une teinte jaune pâle indique une baisse du score d'ombre.

- les vyrrlins ont maintenant un modèle placeholder de leur(s) arme(s) sur eux, et les dégainent à proximité des ennemis et lorsqu'ils se battent.

- le joueur a maintenant un menu contextuel lui indiquant les touches et les actions disponibles à proximité de certains objets (e.g. liste des ordres possibles à proximité d'un allié, allumer sa torche quand on en a une à proximité d'une flamme, etc)

- il y a aussi une liste dynamique des contrôles généraux affichée à l'écran, hors déplacement et contrôle caméra (marcher, sprinter, éteindre une torche portée, retenir ses attaques inventaire...)

- changement des visuels de barre de vie et d'interface générale pour un style plus minimaliste, tant que l'on reste en graphismes placeholders .


Et voici pour la liste factuelle des mises à jour. Ci-dessous, une explication plus poussée du design de la corruption. Vous pouvez aussi fuir vers la fin du billet pour directement voir la prochaine étape de développement !


La lumière et la corruption, pour un contrôle organique des comportements et de la gestion du village

Ok. J'avais écrit dans notre précédent billet que cette partie allait être cruciale pour Lampyre. Et elle l'est.

Toute l'essence du jeu se joue autour de cette opposition entre ombre, et lumière. En soumettant l'intégralité des créatures aux mêmes règles de corruption, cela permet des comportements automatiques, organiques, et une mécanique fixe qui relie l'ensemble.

Tout le piment de Lampyre, c'est l'individualité des vyrrlins au cours d'une campagne. Leur évolution au fil du temps, qu'elle soit physique, relationnelle, ou relative à leurs compétences. Leur apparence change au fur et à mesure de leur vieillissement, de leur corruption ou de leur purification. Cette dernière conditionne leur aspect, mais aussi les interactions et les activités qui leurs sont accessibles (pas toutes, heureusement).

Plus concrètement :

- un vyrrlin avec un score de corruption élevé ne peut pas discuter ou profiter d'activités sociales développées, ne peut pas développer de relation amoureuse, voir d'amitié (plutôt négatif)

- mais un vyrrlin avec un score de corruption élevé aura aussi des exigences plus basses sur son emploi du temps ou la qualité de son logis et de sa nourriture, et moins de réactions face aux évènements (bons comme mauvais)

- un vyrrlin ombreux dort moins, va un peu plus vite et se bat mieux avec ses griffes, mais peut subir des pénalités quand il évolue en plein soleil et peut sombrer plus vite dans la corruption

À l'inverse, purifier des vyrrlins est coûteux en ressource principale (je n'ai pas encore son nom, mais c'est un fruit à croissance limitée issu, entre autres, de l'autel principal). Les vyrrlins purifiés sont socialement vifs, élégants, capables de fabriquer des objets fins (armes/armures). Ils peuvent aussi être liés d'amitié voir même d'amour (avec le joueur, et entre eux !).

Le but est de peaufiner une mécanique où l'ombre, comme la lumière, peuvent avoir leurs avantages selon le style de jeu, et la situation dans laquelle se retrouve le joueur. Cela provoque une narration procédurale pour les villageois selon ce qui leur arrive, et peut amener le joueur à devoir faire des choix moraux pour optimiser sa partie... ou sauver sa waifu préférée.

J'adorerai retrouver ce feeling propre à Dwarf Fortress ou Rimworld, lorsque vous recrutez des individus d'abord inconnus, qui vous accompagnent jusqu'au bout de vos péripéties, en vous décevant, ou en vous surprenant.

 

En dehors des vyrrlins, il est important de mettre en place un comportement auto-organisé pour les ennemis ombreux. Le message, s'il n'est pas révolutionnaire, a au moins le mérite d'être clair: l'obscurité amène le danger. Les ombres sont cantonnées au linceul en journée, territoire ennemi, presque impénétrable sans lumière et préparation adéquate. La nuit, elles pourront errer sur la totalité de la carte. C'est là où la gestion des lampes entre en jeu, pour protéger passivement vos constructions de la majorité des attaques. 

Construire ses braseros autour de ses ouvrages, et les allumer avec son propre feu parait être un geste anodin, mais c'est vraiment un pan de gameplay qui DOIT être extrêmement satisfaisant. Les rayons des feux seront généreux, les ombres bloquées ou affaiblies, et le combustible simple à se procurer.

Bien sûr, une fois un villageois recruté, la tournée des feux au crépuscule pourra être une des toutes premières tâches automatisées (c'est un travail assez simple pour que même un vyrrlin proche de la corruption maximale puisse s'en occuper !).


La plupart des nuits seront calmes, avec un minimum de préparation nécessaire. Mais des assauts ennemis auront parfois lieu, annoncés par une brume de linceul envahissante et des ennemis qui convergent vers votre autel. Lors d'évènements aléatoires, ou en réponse à la destruction d'un autel (le petit jeu 2D Kingdom a cette mécanique de représailles !). Il faudra alors renforcer son périmètre lumineux, et appeler ses villageois au combat pour défendre ses bâtiments.


Bref. Ces bases de corruption, et le comportement d'évitement de la lumière des créatures ombreuses, sont là pour rester, et ne changeront que très peu. Les autres mécaniques du jeu s'appuieront intégralement sur ce qu'on a implémenté ! Quelques exemples de prévu :

- pour essayer de purifier un vyrrlin égaré, il faudra le maitriser, et le ramener au village. Mais en attendant sa purification, la journée, il devra être enchainé à l'ombre, sous le bâtiment dédié ou un autre ouvrage ! Sinon... il subira des dégâts du soleil, et mourra, sauf s'il peut s'enfuir jusqu'aux lisières d'ombre.

- les ombrelgins seront parfois accompagnés de leurs grandes sœurs, les chimères. Les chimères sont plus rares, mais aussi bien plus grosses et plus dangereuses. Elles ne sont pas bloquées par les lumières de niveau 1 et reçoivent un score de luminosité réduit (et donc, moins de pénalités passives). Elles peuvent également renforcer les ombrelgins aux alentours pour leur permettre d'ignorer les lumières simples !

- la flamme immuable de l'autel permet au joueur de toujours avoir une petite condition de victoire, même si les conditions sont dantesques. C'est aussi la source garantie d'une étincelle pour allumer les autres lampes (et un visuel satisfaisant ? Imaginez récupérer la flamme éternelle de l'autel de votre demi-dieu, chaque soir, pour protéger votre foyer avec sa lumière :o)


Et il est où le code du game dev journal, Micheline ?

Alors. Beaucoup de développeurs s'amusent à faire des démonstrations de leurs systèmes et de leurs scripts. C'est d'ailleurs super intéressant quand on code soit-même son jeu (et rarement pour copier-coller des scripts, comme on pourrait le penser, mais davantage pour voir l’ingéniosité dont font preuve les devs pour contourner les problèmes rencontrés).

Le problème, c'est que publier ce genre de contenu prend du temps. Dans le genre, vraiment, beaucoup de temps. Pour présenter cela correctement, de façon reproductible, et compréhensible. Quand j'ai commencé le journal de dev, je me suis dit que ce serait peut-être intéressant de publier des bouts de scripts par-ci par-là.

À mon grand plaisir, je passe en ce moment plusieurs heures par jour à développer Lampyre. Et chaque heure que je prends pour renflouer le blog, est une heure que je ne passe pas sur mon délicieux script (et le game design, et l'architecture, et dans un futur proche les concepts arts, l'UI, la présentation du gameplay...).

Les billets de conclusion de bloc de développement restent ! Ainsi que les GIF rigolos. Mais je ne dédierai aucun temps à la présentation de code pour le moment. Rien d'incroyablement ingénieux ou révolutionnaire n'a encore été programmé, je me garderai donc de les communiquer au grand jour.

Sur cette promesse de non-effort, voici une petite compilation des GIF de développement de ce bloc de lumière.

 

Une amélioration du dash des créatures, lorsqu'elles bondissent d'une zone d'AOE. Le mouvement était précédemment forcé sur l'algorithme de pathfinding ("poussée" dans une direction via la navigation). Il est maintenant basé sur la vélocité directe du rigidbody, et ainsi plus fluide.

 

La première implémentation des affaiblissements et dégâts infligés par le soleil aux créatures ombreuses. ELLES BRÛLENT (et sont moins rapides, moins dangereuses...).

 

L'éventail des différentes formes de vyrrlin, selon leur score d'ombre. En partant de la droite: pur (0 de corruption), voilé (20), teinté (50), sombre (70) et égaré (85), ainsi qu'un ombrelgin (100 de corruption permanente). On peut voir qu'avec le soleil levant, le vyrrlin égaré subit des dégâts (même si moindres que l'ombrelgin), et le vyrrlin sombre a une pénalité de vitesse de déplacement.

 

Un aperçu grand angle des bordures ombreuses et de deux zones de linceul irrégulières. La carte de debug tient sur un mouchoir de poche mais la zone de jeu finale sera évidemment bien, bien plus grande.

 

Le comportement de refuge des vyrrlins dans le linceul, lorsque le soleil est levé ! À la nuit tombée, lorsque le score est à zéro, ils peuvent à nouveau errer en dehors de ses limites.

 

Les ombres cherchent à se réfugier à l'intérieur du linceul si elles ne peuvent pas en sortir pour atteindre un ennemi. Cela limitera les possibilités de marouflage de la part du joueur. Notez mon score de corruption à 84, qui me ralentit en plein soleil (icône de debuff :( ).

 

Un allié qui sort précipitamment de la zone de linceul, par le point le plus proche. Il évite d'y retourner, sauf si on lui ordonne de nous suivre à l'intérieur. Notez aussi le petit effet violet sur les vyrrlins, indiquant un score de corruption qui monte !

 

Un ombrelgin bloqué par les rayons des braseros. Ce comportement est vraiment, très plaisant à coder. Je pense rendre les zones d'effet des lumières plus grandes pour les rendre plus satisfaisantes, et plus utiles !


Des alliés, qui reculent et utilisent des lumières proches pour se battre, au lieu de rester dans le noir ! Notez que celui qui se bat au corps à corps finit tout de même par s'approcher des ennemis pour les toucher. Le but reste de défaire ses adversaires.

 

Une démonstration des tiers de lampe en action. Les lampes classiques sont de tier1, et la bleue est en tier 2. Notre ombrelgin a ici reçu un buff, qui lui permet d'ignorer la lumière de niveau 1... mais pas celle de niveau 2.

 

Les premiers essais d'instanciation de torche sur le joueur. J'ai peut-être oublié de limiter la quantité de modèles créés.

 

L'extinction des lampes, lorsque leur réserve de combustible s'épuise et s'approche de zéro. Notez que la surface ET la quantité de lumière émise sont diminués (ici en version accélérée).

 

Le même effet avec une torche portée ! TABASSAGE DANS LA NUIT.

 

La démonstration du menu contextuel de commande tout neuf, et de l'allumage des feux (avec d'autres feux, zOMG) ! On se permet même d'éteindre sa torche en restant appuyé sur une touche. Wow.


Et la bataille FINAAAAALE du bloc de développement, pour mettre à l'épreuve le process time de notre jeu et ses mécaniques actuelles. ON A NOTRE RETRAITE DES OMBRES VERS LE LINCEUL AU SOLEIL LEVANT ! FUYEEEEEZ PAUVRES FOUUUS !



 La suite des festivités: le bloc de développement numéro 3

 Alors, quelle est la roadmap mise à jour ? Une partie de moi avait très envie d'implémenter le système de purification. Mais celui-ci va nous demander des bâtiments et des ressources. La prochaine étape est donc...

... LE LOOT ET L'INVENTAIRE !

Nous allons délaisser un moment la violence des combats et les ombres, pour coder les fonctionnalités suivantes:

- implémentation des objets tombés au sol dans le monde, avec ou sans physics.

- programmation des classes d'objets Item (qui existe déjà, et dont les armes sont héritées) et Inventory. Un inventaire sera ici tout système recevant et conservant des objets dans le jeu. L'inventaire des vyrrlins, les contenants, les stations d'artisanat...

- les inventaires doivent pouvoir être rapidement paramétrables avec entre autres un nombre d'emplacement et un poids limite.

- ils doivent aussi pouvoir afficher leur contenu de façon flexible dans une interface commune, permettre de déplacer ou de diviser les objets.

- les objets devraient pouvoir afficher leur nom, leur description et leurs informations dans une info-bulle d'inventaire.

- les objets tombés au sol seront soit en surbrillance permanente, soit mis en évidence grâce à une touche du clavier dédiée (pensez à la touche d'affichage des noms d'objets au sol, de Baldur's Gate 3 ou de Diablo).

- les objets seront divisés en deux catégories: ceux qui sont transportables dans un inventaire, et ceux plus gros, qui devront être portés. Les armes, les grosses bûches, ou les armures, ne pourront pas être empilées et transportés par magie dans un sac à dos invisible. Ce type d'objet devra être porté dans les bras. Mais ne vous inquiétez pas, le but n'est pas de rendre le système frustrant ; au contraire.

- les objets transportés doivent pouvoir être ramassés, cumulés dans les bras selon leur type et leur poids, et lâchés au sol ou sur une station possédant des réceptacles adéquats (un râtelier d'arme par exemple). Ils bloquent toute attaque ou action tant qu'ils occupent les mains du porteur. Le système n'est pas exclusif aux vyrrlins, je veux que toute créature puisse porter des objets lourds sur elle.

- le joueur doit pouvoir ouvrir son inventaire, manipuler les objets à l'intérieur, les lâcher au sol, trier automatiquement son inventaire pour cumuler les piles qui peuvent l'être ou ordonner ses objets par type ou ordre alphabétique.

- il doit aussi pouvoir transférer des objets d'un contant à son inventaire, et vice-versa (et on devrait pouvoir le faire programmatiquement entre n'importe quelle paire de contenants, pour être honnête).

- un message doit apparaître à l'écran pour informer le joueur que son personnage, ou toute autre entité ne peux pas réaliser une action (ramasser un objet avec l'inventaire plein, esquiver alors que l'on a plus d'énergie...)

Et en bonus, nous instancierons au final notre tout premier rocher, que nous minerons pour faire tomber des objets ! Ce sera le début de notre phase de récolte (omg je spoile tout).


Merci à vous de suivre ces péripéties insensées. Je vous donne rendez-vous sur Twitter (@Ariatowl) pour suivre de plus près le progrès de ce bloc #3 de développement, j'ai nommé, LE LOOT. Et je vous dis à la prochaine sur ce blog.

Prenez-soin de vous !

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 !