25 juin 2025

Game dev #08: sauver Lampyre

 Salutations voyageur ! 

 

 

DÉJÀ DE RETOUR ! Comme prévu, ce segment allait soit être très long, soit rester bref. Après avoir passé le mois de juin à poncer la documentation et faire rouler les écrans de chargement, nous avons désormais notre système de sauvegarde planifié.

 

 La note de patch

1) "Ce sera un menu interactif avec des easters eggs je vous jure, mais en attendant c'est un écran fixe avec quatre boutons.": Lampyre a désormais un menu principal tout ce qu'il y a de plus classique ! Il vous permettra au choix de créer une nouvelle partie ou d'en charger une existante. La seule originalité sera un outil de gestion de vos personnages pré-créés - il vous sera en effet possible de préparer des vyrrlins sur mesure qui pourront apparaître dans vos parties, et dans les rôles que vous souhaitez.

2) Vous vous souvenez de l'écran de chargement de Black and White 2 avec le logo Lionhead Studios ? Moi oui: autre point technique sensible, j'ai appris comment pré-charger les changements de scène et lancer des fonctions sur des threads secondaires. En affichant une petite transition et un icône de chargement fluide, cela permet de patienter en attendant la mise en place du niveau.

3) Pour une plantation de radis sauvages presque fluide: cette astuce me permet de générer une nouvelle carte de jeu sans bloquer l'application (la répartition procédurale des biomes, ainsi que l'instanciation de tous les nœuds essentiels au bon fonctionnement du jeu comme le soleil, la lune, l'UI générale...). Malheureusement, la dissémination des ressources bloque encore le thread principal pour quelques secondes sans que je n'ai réussi à en isoler la cause exacte.

4) Je m'en souviens très précisément: j'ai implémenté deux ressources de sauvegarde qui me permettront d'encoder toutes les informations nécessaires à la reconstruction d'une partie, d'une carte ou d'un personnage. Elles sont écrites avec succès sur le disque utilisateur et peuvent être chargées pour en récupérer les données. Entre l'écriture JSON, binaire ou le système de Ressources, j'ai jeté mon dévolu sur ce dernier pour sa grande simplicité. Son seul inconvénient étant un manque léger de fiabilité, car sur Godot 4.1 ces ressources peuvent être utilisées pour exécuter du code néfaste sur votre ordinateur. Mais est-ce que j'ai l'air d'être du genre à installer des logiciels espions sur votre machine ? (ceux qui ont répondu oui auront une version spéciale de l'exécutable qui lancera Rick Roll à la place des crédits de développement)

5) Tu charges, ou tu pointes cong ?: que l'on entre sur la carte pour la toute première fois, ou que l'on charge une sauvegarde, la scène de jeu est la même et les nœuds sont initialisés indépendamment et proprement. Une fois l'initialisation générale effectuée, le jeu va, au choix, disséminer les ressources procéduralement, ou lire une sauvegarde pour recréer à l'identique un paysage existant (ce dernier point étant laissé en suspens, voir le paragraphe ci-dessous).

 

Le commentaire du développeur en bois

Le résumé de tout ça, c'est que je dors désormais sur mes deux oreilles tel un rat repu de Big Mac rance dans mon coin d'égout car la fonctionnalité de sauvegarde était un obstacle qui m'effrayait beaucoup, et on l'a complètement démystifiée. CEPENDANT. Comme anticipé, encoder une sauvegarde, c'est choisir ce que l'on veut et ce que l'on doit restituer sur une carte. Je me suis bien amusée à enregistrer / charger l'emplacement du joueur en temps réel, mais au final, ce sera l'intégralité de l'état des ressources, des bâtiments, des inventaires, des créatures et des paramètres de partie qu'il faudra préserver.

Si je peux me permettre une métaphore, sauvegarder, c'est un peu prendre les photos pour la visite virtuelle de la maison. Il faut le faire lorsque l'ouvrage est terminé, décoré, meublé - pas quand la pelleteuse commence à creuser sur le terrain vague. Je pourrais implémenter la sauvegarde des végétaux, mais je ne suis pas certaine que leurs caractéristiques restent 100% à l'identique dans le futur (spoiler: non, il y aura quelques changements connexes sur les ressources quand on ajoutera le restant des minerais, les bâtiments de production...). 

Donc, j'ai préféré tout planifier et me laisser cela de côté pour y revenir quand on codera notre sauvegarde définitive ! Tout sera alors plus clair et on ne la programmera pas pour rien. 

Dans le même genre, on touche quasiment le Graal du doigt avec un chargement de carte fluide, à l'exception de la génération initiale des plantes. Je ne sais pas encore ce qui bloque le thread principal mais j'aurais l'occasion de l'identifier précisément quand je vais disséquer la fonction pour l'adapter au chargement de fichier. Mon rêve serait d'afficher un petit visuel interactif stylisé pendant le chargement de carte ! Mais pour que cela fonctionne, l'application ne doit jamais devenir irresponsive (pour information, des jeux AAA comme Monster Hunter Wilds SONT irresponsive pendant une dizaine de secondes à leur lancement sans que je n'en sois jamais outrée - mais ce ne sont souvent pas de bons exemples d'optimisation).

Dans l'ensemble, je suis très contente d'avoir fait ce bloc maintenant. L'objectif est totalement rempli et on peut foncer sereinement sur la suite du développement.

 

La suite

Nous allons respecter nos plans et nous intéresser aux premières minutes de jeu et aux conditions de victoire (l'artisanat arrive juste après, bear with me). Ce que je veux, c'est qu'on se lance doucement sur la pente d'un véritable jeu et qu'on déroule les premières accroches de gameplay. 

Pensez au dernier jeu de survie ou de construction que vous avez découvert. On vous a peut-être lâché dans la pampa, vous avez commencé à bouger autour de vous. Woah, une pierre, je la ramasse ! Ok, j'ai un inventaire. Je vois que j'ai aussi un menu de fabrication. Tous ces plans à débloquer ! Obtenir un outil de base me permet de récolter de nouvelles ressources. C'est fort plaisant d'éclater ces ennemis aux alentours, est-ce qu'on peut le faire plus efficacement ? etc... Bref, du game design pur et dur. Présenter les moyens de jeu de façon habile au joueur et les rendre attachantes et attirantes à expérimenter ! Quelle que soit la complexité de Lampyre, les premiers instants doivent immédiatement donner envie d'en faire plus.

Ce bloc numéro neuf est d'ambition moyenne dit-elle avant de manger ses cinq mois de dev et voici ses objectifs: 

- implémenter la collision et les facteurs de variations complets du linceul d'ombre sur la carte de jeu (déplacer sa collision sur le PhysicsServer3D pour des questions de performance et rendre sa forme bien plus organique, à la différence du carré sommaire que l'on a actuellement)

- placer les couvoirs d'ombre au sein des zones de linceul, et faire en sorte que la partie soit gagnée s'ils sont détruits

- refondre rapidement nos objets de type Lumière et déplacer leurs zones de collision sur le PhysicsServer3D

- mettre en place l'état initial de l'autel, de l'arbre-liandre et du joueur en début de partie ; le déblaiement de l'autel abandonné débloque les premières fonctionnalités de construction, et les tous premiers plans

- en bonus, j'aimerais aussi poser la première brique du système d'expérience et de découverte de nouveaux plans pour que notre initiation soit complète ! 

Vous comprendrez qu'une fois que cette boucle sera initiée, l'objectif suivant sera d'implémenter toute la chaine technologique qui vous fera acquérir armes et armures afin de tabasser les couvoirs d'ombre et de gagner la partie.

 

Les visuels du schnaps

Ce segment peut être résumé par un seul GIF ! Celui qui montre l'arrivée sur le menu principal, la génération d'une carte et le temps de chargement d'entrée en jeu. Notez le blocage de la fenêtre de jeu sur l'étape de génération de la végétation (qui occupe 99% du temps de chargement total). Étant donné que celle-ci pourrait durer plusieurs secondes supplémentaires dans le cas de grandes cartes, j'aimerais beaucoup la rendre totalement fluide pour ne pas inquiéter le joueur qui attend le chargement.

 


 

Et voilà pour cet interlude technique, on fonce poursuivre la construction du jeu. Prenez soin de vous ! 

2 juin 2025

Game dev #07: le peuple des noix

 Salutations, voyageur !

Nous restons dans notre course paisible au développement de Lampyre, en achevant ce segment en tout juste quatre mois ! Et quel bloc c'était. Définitivement un peu plus charnu que prévu - mais les résultats sont là. Nous avons maintenant tout notre écosystème végétal et notre arbre liandre fonctionne à merveille.

 La note de patch

1) Il était une fois, le temps: pour faire pousser des plantes, et passer les saisons, il faut une échelle de temps (omg, incroyable, je sais). Pour l'instant matérialisé par un simple texte, le calendrier de l'UI vous indiquera l'heure (grossière) de la journée, la saison et le nombre de jour qui s'y sont déjà écoulés.

Pour les vyrrlins, le temps est rythmé par la course du soleil. À cause des ombres, l'aube et le crépuscule revêtent une importance capitale. Les équinoxes et les solstices, eux, font souvent l'objet de fêtes ou de cérémonies, car ils sont les marqueurs de changements dans la durée des jours de l'année.

2) Cycle de pousse complet: les plantes avaient déjà une croissance présente, mais désormais, elles sont correctement représentées dans toutes leurs étapes de pousse (graine, herbe, buisson et arbre si applicable). Elles apparaissent avec une échelle et un score de pousse légèrement variables qui affecteront la quantité de produits qu'elles pourront donner (grosse plante = grosse récolte, zOMG). Leurs matériaux apparaissent progressivement et elles peuvent régénérer leur vie, à condition que le soleil brille. Une fois arrivées au bout de leur espérance de vie, elles pourrissent et disparaissent. Mais, le plus important reste qu'elles peuvent désormais se multiplier de façon autonome si leurs fruits sont laissés tranquilles !

Un script de régulation saisonnière permettra aussi à la majorité des essences de repeupler votre carte si vous les avez décimées (ce n'est pas très rapide mais cela vous évite d'être bloqué au moyen-terme). 

3) Le système de symbiose: certaines plantes ont des effets sur leurs consœurs alentours. Ils peuvent être bénéfiques (pousse améliorée, davantage de fleurs et de fruits produits, protection contre les ronces) ou néfastes, comme c'est le cas pour la ronce pyrope (qui ralentit la croissance des voisines). Vous pourrez exploiter ces symbioses lorsque vous définirez des zones de plantation. Il y aura ainsi un intérêt à planter certaines fleurs au milieu de vos buissons de baies ou de vos légumes-racines.

Encore plus important, ces symbioses fonctionnent sur...

4) L'arbre liandre (liandraastvay): au cœur de votre enclave se trouve un arbre très spécial, dont les tubercules et les fruits peuvent vous purifier de la corruption. Trouver cet arbre est d'ailleurs la raison pour laquelle votre personnage, d'abord errant, devient jouable.

L'arbre liandre n'a nul besoin d'être arrosé et ne peut pas être multiplié. Au fur et à mesure de sa pousse, il développera une quantité croissante de bulbes, de fragments d'écorce et de fruits que vous pourrez récolter pour votre village. Il sera également victime de la pousse de plantes indésirables qui, si elles ne sont pas retirées, ralentiront la production de ces denrées (sarments, mousse, lierre). Et surtout, il pourra recevoir les effets bénéfiques d'autres plantes symbiotes ! Les alentours de votre arbre-liandre risqueront de ressembler à un jardin sauvage... comme cela se fait dans la plupart des hameaux vyrrlins. 

5) De savoureux champignons: trois espèces de champignons pourront pousser dans divers biomes de votre carte. Leur récolte est très simple et ils constitueront des ingrédients de choix pour la cuisine et l'alchimie. Les polypores charnus poussent en plus grand nombre sur les souches et les troncs d'arbre en décomposition. Alors, vous aurez peut-être intérêt à laisser quelques arbres morts en paix.

6) Le trésor de la forêt: plusieurs ruches vont également croître sur des arbres de la carte ! Les abeilles peuvent s'épanouir dans n'importe quel biome, mais elles seront plus fréquentes là où les bois sont denses. En dehors de l'hiver, elles produiront du délicieux miel et il suffira de visiter la ruche pour la récolter.

7) Une séricuci... une sérisicu... UNE SOIE NATURELLE: le mûrier levantin est un arbuste unique qui ne vous donnera ni fleurs, ni fruits. Mais il abrite chaque année des chenilles de papillon de soie qui se nourriront de ses feuilles. En été, vous pourrez récupérer des cocons (à filer en soie brute) et parfois même des papillons pour ensemencer vos propres treillis de sériciculture. C'est moins onéreux d'aller en récolter dans le forêt que de les acheter à des zélotes, ça je vous le garantit.

8) Des plantes mouillées: laissée de côté depuis le segment de génération de carte, la rivière fait son retour. Lorsqu'elle est générée, deux plantes poussent exclusivement sur ses berges: le roseau goujon (source de fibres végétales) et le cresson printanier (délicieux en salade). 

9) Amélioration des commandes de récolte: les raccourcis et les modes de récolte ont été simplifiés pour les herbes et la récupération de produits (fleurs, fruits, champignons, miel). Celle-ci est désormais instantanée pour plus de fluidité ! Tailler des buissons, déterrer des graines ou couper des arbres restent des actions soutenues.

10) Vous êtes maintenant Stéphane Marie: en temps normal, la taille, la forme et la couleur des végétaux vous donnera déjà une bonne idée de leur stade de croissance. Mais pour en savoir plus, il est possible de passer en mode botaniste d'un clic de bouton (ou d'une touche de clavier). Ce mode met en surbrillance toutes les plantes environnantes (y compris les graines encore enfouies), leur essence, leurs détails de croissance et leurs rayons d'effets symbiotiques. C'est aussi avec ce mode que vous aurez l'occasion de déterrer des graines gênantes pour en planter d'autre, ou prévenir l'apparition de plantes indésirables.

11) De quoi faire un bel herbier: nous avons implémenté nos 26 essences végétales et tous leurs produits (bois, brindilles, feuilles, fleurs et fruits) ! Les modèles sont encore sommaires mais en tout cas les performances sont au beau fixe grâce à notre système de MultimeshInstancer et de corps de collision gérés par le PhysicsServer3D (voir le game dev #5 qui nous a coûté une partie de notre santé mentale l'automne dernière).

12) Hé ho ! Hé ho ! Ça coupe du bouleau !: le mini-jeu de bûcheronnage présente maintenant quelques variations en fonction de l'essence de l'arbre que vous essayez d'abattre. Les serres-faux ont elles un tiers de récolte, qui améliore la vitesse à laquelle la barre de matériaux bonus se remplit (en orange). Ce tiers sera important pour exploiter les arbres et les gisements, et insignifiant pour les autres types de récolte.

Comme toujours, ce sont les mécaniques qui sont finales, et pas du tout leur équilibrage ou leurs visuels. Il faudra une UI savamment conçue pour rendre le système de symbioses intuitif et plaisant à utiliser !

 

La suite

Si vous vous souvenez de ce lointain début d'année (ou bien si vous scrollez deux articles plus tôt), vous devriez être en train de vous bondir de votre fauteuil, un petit poing rageur brandi vers le ciel.

"JE SAIS, JE SAIS ! C'EST L'ARTISANAT ENSUITE, JE M'EN SOUVIENS ! À NOUS LA FABRICATION ET LES TIERS TECHNOLOGIQUES BON SANG §§!! LE CRAAAAAAFT -"

Et c'est avec une gravité certaine que je vais devoir vous demander de vous rasseoir et de boire un petit verre d'eau pour vous calmer s'il vous plait. Maintenant que tous ces beaux systèmes commencent à être en place, il nous faut nous occuper d'une fonctionnalité inévitable - avant l'artisanat.

Elle rôde dans mon esprit depuis le début du projet. Elle hante mes nuits et je vois sa silhouette sous mes paupières quand je cligne des yeux devant mes sessions de Monster Hunter. On a fait des systèmes d'instanciation, du procédural, des textures projetées, et on fera des squelettes, des modèles, des shaders, et des arbres d'animation. Mais ce qui me perturbe appartient à l'inconnu technique. Je veux parler d'un système de sauvegarde et de chargement.

Sauvegarder sa partie, c'est un prérequis obligatoire pour tout jeu persistant. Après moult réflexion, j'ai décidé de m'y mettre maintenant ! On a un personnage, et une carte avec de la végétation qui est générée procéduralement en quelques secondes. C'est déjà plus qu'il n'en faut pour s'initier à la gestion des données de jeu !

Les buts de ce segment de développement sont donc les suivants :

- implémenter une première ébauche de notre menu principal (où l'on peut y créer une nouvelle carte, en charger une ou quitter le jeu)

- mettre en place un écran de chargement pour patienter lors de la génération de la carte

- implémenter notre menu d'options en jeu (on l'on peut sauvegarder sa partie, la charger, revenir au menu principal...)

- sauvegarder une partie et pouvoir la charger pour revenir sur la même carte 

Peut-être que l'implémentation du système de sauvegarde me demandera de réviser un ou deux points de la gestion des ressources (j'ai des références à des RID dans mes scripts et je sens que ça va me retomber sur la mouille). J'ai bon espoir que ce soit un segment plus court que celui que l'on vient de faire, mais sait ce qui se passe quand on est trop optimiste - alors je vais rester humble, et assumer que ça prendra également plusieurs mois. 

Par ailleurs, une fois ce bloc terminé, j'ai aussi décidé de continuer le développement de façon un peu plus organique en construisant les conditions de victoire pour construire le gameplay autour d'un vrai début de jeu. Ne vous en faites pas, après avoir placé les couvoirs d'ombre sur la carte et implémenté un écran de fin de jeu, l'artisanat reste le prochain gros bloc sur la liste.


Les visuels du schnaps

Une galerie de GIF remplie de plantes en forme de cylindre. Qui poussent.

 

 
1) J'ai toujours voulu que mes plantes aient une croissance interpolée, et non saccadée. Pendant mes premiers tests, je les ai initialisées à 100x leur échelle de base pour amorcer leur création. Grave (mais rigolote) erreur. 


2) J'ai eu des petites sueurs froides quand je me suis rendu compte que jusqu'à une certaine croissance, les pousses d'arbres ne devaient PAS bloquer les mouvements des créatures. Mais nous avons séparé les formes de collision de récolte / d'obstacle pour les végétaux qui en ont besoin. Arrivés à une taille suffisante, une seconde collision s'active et met à jour la carte de navigation (grâce à notre beau script optimisé, j'en ai les larmes aux yeux :') ).

 

3) Les essais accélérés de multiplication passive de nos plantes. On peut voir les buissons perdre de la vie car ils avaient encore une espérance de vie epoustouflante de UNE journée, et ils pourrissaient déjà à peine apparus.


4) Récolte instantanée sur sur un buisson encore jeune, contre une récolte soutenue sur un buisson mature. L'idée est simplement de ressentir qu'en poussant, un végétal se pare de bois et devient plus ardu à récolter. Faucher des herbes avec les griffes ou la serre-faux se fera en un petit nombre de mouvements instantanés.


5) Nos premiers champignons, les polypores charnus ! Ils ne poussent que sur un arbre mature, ou sur des troncs et des souches tombés à terre. L'oreille de terre est un grand champignon solitaire, tandis que la brebis-sage forme des bouquets denses en sous-bois.


6) Une ruche accrochée à un pin de cendre. Essayer de couper l'arbre alors que des abeilles nichent dessus vous inflige des dégâts, car elles défendent leur hôte. Il faudra détruire la ruche (en récupérant quelques rayons de miel) pour pouvoir récupérer le bois.


7) Une roncières de pyropes. Les ronces pyropes tendent à pousser en groupe. Elles ne vivent qu'une seule année, mais se multiplient plutôt vite. Et surtout, elles ralentissent la pousse des autres végétaux autour d'elles. Les pyropes sont une bonne source de tiges, de fleurs et de fruits, alors pas de gâchis en les coupant !


8) L'arbre liandre derrière l'autel de l'enclave. En bleu luminescent, ce sont tous les produits de liandre qu'il fera éventuellement pousser (les tubercules au sol, les fragments d'écorce sur son tronc et les fruits dans sa cime). Sont également présents des sarments (les arceaux rouges) et des paquets de mousse (les sphères vertes) qui elles, ralentissent la croissance des produits associés. Les désherber vous donne du très bon combustible et restaure la croissance du liandre.


9) Le miladrea doux est un buisson qui a la capacité de bloquer la pousse des ronces pyropes environnantes, et de les faire se faner. L'une des deux essences végétales avec cet effet, qu'il sera intéressant de garder près de ses cultures et de son arbre liandre. 


10) Le mode botaniste. Les graines que vous portez dans votre inventaire s'affiche et cliquer dessus vous permet de les planter. Passer le curseur sur les plantes vous permet d'afficher leur description, et les rayons d'action des essences symbiotiques s'affiche (ici dans sa première version un peu fouillis).


11) Pour remédier aux zones d'influence illisibles qui se chevauchaient, j'ai cuisiné un shader maison à partir de deux scripts libres de droits créés par arlez80 et abSpaghetti. Dans la version finale du jeu, je pense que ces zones seront pleines mais transparentes et légèrement luminescentes. Mais en attendant, il est parfait et on va s'en resservir.


12) Le semis de graines ! Une fois dans le mode botaniste et les graines de l'essence sélectionnée, on peut soit semer les végétaux un à un, soit en jeter une poignée aléatoirement autour de nous. Attention - comme dans la réalité, toutes les graines ne parviennent pas forcément à germer.

 

13) Le mode botaniste permet aussi d'inspecter l'arbre liandre pour voir son stade de croissance et les effets qui lui sont appliqués (ici, sa pousse est ralentie par de multiples indésirables ainsi qu'une ronce pyrope).

 

14) Le mûrier levantin (oui, c'est encore un plot) ! Ses "fruits" sont les cocons de soie des papillons qui ont grandi dans son feuillage. Il n'y en a qu'un seul par carte, et il ne repousse pas si vous le coupez. Il sera toujours possible d'en acheter une pousse aux caravanes, mais il restera rare et exceptionnellement onéreux.

 

15) Un petit visuel du plaisir, avec plusieurs essences de prairies visibles. J'imagine la frondaison des arbres bien plus haute, et de l'herbe couvrant tout le sol nu. Ça va être vraiment chouette.


 

16) Le mode botaniste vous permet de voir les graines encore enfouies dans le sol, et de les enlever. Vous ne récupérez aucune ressource en le faisant.


17) Deux exemples de variations de mini-jeu de bûcheronnage. Le premier arbre est un saule des marais, et d'épaisses plaques de mousse vont gêner la visibilité de la zone cible ! Le second est un pin de cendre, qui affiche une poche de résine qu'il ne faut pas heurter sous peine de faire reculer le score de récolte.

 

Comme toujours, je poste des mises à jour régulières sur @Ariatowl. L'écriture du roman avance bien, même si je ne suis pas spécialement en avance. Je vous dis à la prochaine pour pouvoir continuer une sauvegarde sur Lampyre.

Prenez soin de vous !

1 avr. 2025

Une année de polygones GODOT !

 Salutations voyageuuuuuuur !

Nous avons le droit de profiter d'un billet tout spécial aujourd'hui, car nous pouvons fêter les UN AN du projet Lampyre ! Wouhouuuuuu !

 


Et fort heureusement, par une année, on peut surtout signifier douze mois de code quotidien pour faire avancer ce projet ambitieux, mené d'une main débilus, mais ferme. Mais débilus.

Nous sommes partis d'un concept complétement théorique, et aujourd'hui, ce sont de nombreux segments de développement qui ont été menés à bien, notamment le déplacement, l'auto-attaque et les types de frappe, l'inventaire, les lumières, la corruption, la gestion des objets, la création des biomes, la croissance des plantes, la construction, et j'en passe !

Pour se remettre en tête ce qui a pu être développé dans l'année, j'ai compilé nos clips de mise à jour postés sur ce blog, ainsi que sur twitter. En joie !

 

 

Vous pourrez également remarquer quelques modifications sur le blog, et notamment son changement d'adresse (lampyre-dev.blogspot.com), qui permet de mieux centrer le site autour du projet. Pas d'inquiétude, je ne supprime rien de nos glorieuses archives Dwarf Fortress !

Dans l'en-tête du blog, vous avez maintenant accès à une présentation du projet ainsi qu'une roadmap du développement, qui peut aider à se faire une meilleure idée de ce qui est prévu pour Lampyre, de ce qui est terminé ou en cours de travail. Cette feuille de route sera notamment mise à jour lors de la complétion des grands segments de développement (jusqu'ici, tous les deux à trois mois en moyenne !). Sur twitter, je posterai plus régulièrement une version condensée de ce visuel pour vous tenir au courant des progrès réalisés.

Et ce n'est pas tout ! En plus de la programmation, j'ai décidé d'agir pour reprendre ma seconde passion qui est l'écriture. Et quoi de mieux que d'imaginer des histoires relatives à notre jeu pour développer son univers ?

POV : vous avez essayé de dessiner un key art avec cinq personnages en moins d'un mois et c'est pas passé - du coup la version finale arrivera plus tard.

 

J'ai ainsi le plaisir de vous présenter Lampyre, le roman. Initialement prévue comme une nouvelle, son prologue de *tousse* 23 000 mots *tousse* m'a finalement fait dire que, peut-être, ce ne serait pas un format court mais une saga sur plusieurs livres oui je sais ce qu'est sensé dire un prologue, à l'aide.

Le style est plutôt lent. Détaillé. Bien gris, à base d'injustices et de gens qui ont tous des défauts (qui les mettent dans la sauce). Mais ça se veut avant tout le reflet d'un monde qui a beaucoup de beauté dans sa nature et dans son peuple ! J'espère que vous vous attacherez autant que moi aux personnages, je vais essayer de ne pas tous les consumer dans le feu du scénarium ! 

Le prologue est disponible en lecture libre à cette adresse. 

Si vous avez une liseuse électronique, vous pouvez également le télécharger et l'envoyer sur votre appareil (en .docx pour Kindle, il est possible que celui-ci garde la mise en page police claire sur fond sombre ; dans ce cas, il vous suffit de dupliquer le document du prologue sur votre google docs, et de remettre un fond blanc et la couleur de police par défaut avant de l'exporter).

La suite est en cours d'écriture et mon objectif est de terminer le premier livre, pour l'instant appelé Les Chutes rien à voir avec des escaliers, avant la fin 2025. Et à ce moment là, j’essaierai de le publier en version électronique, en français et en anglais !

Par ailleurs, j'ai quelques idées d'articles supplémentaires pour le blog, mais je ne promet rien, selon mon emploi du temps ! Le livre restera une priorité.

 Je vous remercie de suivre mes élucubrations, et je vous souhaite un très bon mois d'avril. Prenez soin de vous !

13 févr. 2025

Game dev #06-BIS: faire pousser des PLONTES.

Salutations, voyageurs !
 

    ME REVOILÀ DÉJÀ après presque deux semaines à me reposer mettre frénétiquement à plat toutes les mécaniques de jeu de Lampyre. Entre cette "pause" théorique et la préparation de l'anniversaire du projet, je dois admettre que l’exercice est plutôt étrange. Je garde mes monologues émotionnels pour début avril, mais sachez qu'en somme, je ne suis plus simplement en train de bidouiller un programme pour un plaisir. Je veux le sang d'un jeu terminé, et cela signifie qu'on va encore davantage mettre l'accent sur des fonctionnalités qui se veulent finales (utilisables, là tout de suite, comme dans la future version 1.0).

Le game design n'est pas intégralement terminé mais comme promis, nous nous remettons au plus vite dans le code pour avancer le projet. Nous avions deux segments de mécaniques à l'ordre du jour: l'artisanat, et les cultures. Et ce sont les plantes qui ont obtenu le privilège de passer à la casserole en premier.

Rappelez-vous que nous avons déjà eu le plaisir de voir des végétaux lors des segments précédents de récolte, et d'instanciation de ressources (mais si, souvenez-vous de ces cubes et sphères colorés qui tombent par terre en cassant ma carte de navigation). La liste des essences qui seront disponibles dans le jeu est maintenant posée (et se veut définitive), tout comme l'utilité de leurs différents produits (feuilles, graines, fleurs...).

Ce nouveau segment vient mettre un troisième et dernier clou dans les fonctionnalités relatives aux essences végétales, à savoir: 

- la pousse et le cycle de vie complet de toutes les plantes sur la carte

- cela comprend également le fonctionnement et l'entretien de l'arbre-liandre, l'une des pièces centrales de la gestion de cette ressource dans Lampyre

- la multiplication locale des végétaux, mais aussi le contrôle de leur population de saison en saison (on les distribue à la création de la carte, et c'est chouette, mais il faut qu'elles réapparaissent naturellement sur la carte)

- la pousse et la gestion de la ronce pyrope, une plante qui a la fâcheuse tendance à s'installer sur ses pairs et à freiner leur croissance

- les plantes bénéfiques pour leurs voisines

- les champignons (au fonctionnement simple)

- les ruches (tout pareil)

- les interactions définitives avec les herbes, buissons et arbres (couper, récolter les fleurs, les fruits ; on finalise ce qu'on posé au bloc de récolte précédent)

- les variations du mini-jeu de coupe d'arbre selon nos six essences (le principe du mini-jeu lui, ne change pas)

- le mode botaniste, pour voir les détails des plantes environnantes et semer les graines autour de nous

- désigner des zones de plantation pour qu'un ou plusieurs villageois s'en occupent (leur IA d'entretien sera codée lorsque nous aurons les-dits villageois)

- la dormance des plantes dans le linceul (nous rompichâmes)

 

Au final, nous aurons une version définitive de tout ce qui est vaguement herbeux dans Lampyre, et pourrons récolter l'intégralité de leurs produits, et même en gérer des cultures. Ce qui nous régalera pour repartir sur l'artisanat.

Ces points sont très hétérogènes en terme de temps de développement. Je m'attend à ce que le plus costaud soit le mode botaniste et les zones de plantations (rien que pour le fait qu'elles impliquent des interfaces). 

Les instanciations et la pousse ne sont pas des logiques très complexes, mais vont par contre demander un peu de finesse dans leur implémentation pour trouver un compromis entre pousse organique, et performances (on va pas appeler 15k fonctions process soixante fois par seconde pour faire pousser des pâquerettes, hein, nononononon).

Ces objectifs incroyaux étant mis en place, je vous donne rendez-vous via @Ariatowl pour avoir les mises à jour régulières de mes pérégrinations, et surtout, restez attentifs à la date du 1er avril où nous fêterons le premier anniversaire de Lampyre, avec des délicieuses surprises préparées par mes soins :D.

 Prenez soin de vous !

4 févr. 2025

Game dev #06: construire, bâtir, DÉTRUIRE.

 Salutations, voyageurs !


    Et c'est après cette fin d'année productive que nous achevons notre segment de développement dédié à la construction des bâtiments !

Je dois dire que le bloc m'intimidait un peu, mais nous avons plongé dans ces fonctionnalités sans faiblir et vaincu tous nos obstacles. J'avais une assez bonne idée de la façon dont on construirait les structures dans Lampyre, et je pense que nous avons codé une version très aboutie de ce que nous aurons dans le jeu final (ouais, je me tapote les épaules toute seule, il faut être clément avec soi-même).

Voici sans plus attendre le récapitulatif de ce qui a été implémenté dans notre glorieux prototype.


La note de patch

    Nous souhaitions implémenter un système de construction par étape - quelque chose de modulaire, satisfaisant, et qui fait un chouette usage de ces gros matériaux qu'il faut porter à bout de bras vers le chantier. Une construction où les éléments visuels des structures apparaissent petit à petit alors que vous travaillez dessus.

Tous les systèmes décrits dessous sont procéduraux, dans le sens où j'ai mis en place un template qui me permet de définir un nouveau bâtiment à construire en quelques minutes, pour peu que j'indique ses meshs et les matériaux de construction requis.

1) Et le premier menu fut: le menu de construction est officiellement notre premier-né dans la lignée des menus du jeu (nous aurons une carte, un écran de gestion des villageois...). Souhaitant faire les choses bien, j'ai pris mon temps pour développer des classes adéquates et correctement héritées. Concrètement, dès que nous en aurons d'autres à implémenter, toutes les fonctionnalités d'ouverture, de fermeture et de récupération des signaux sont déjà opérationnelles (ouais, la programmation orientée objet, tac tac, tavu).

 


Le menu de construction présente la liste des schémas de construction connus par votre personnage. Il permet de les filtrer selon des tags, ou selon leur nom.

Les tags actuels sont les suivants: structure d'artisanat, structure lumineuse, structure fermée (salle), stockage, décoration. Je n'exclus pas de rajouter d'autres filtres dans le futur, mais ceux-ci couvriront la très grande majorité de nos besoins.

Chaque schéma de construction présente les tags associés à ce bâtiment, sa description, sa taille, et les matériaux requis pour le construire.

Le menu de construction sera débloqué par la simple approche de l'autel de liandre, en début de partie. Le déverrouillage des schémas de bâtiments est un sujet encore inexploré de mon côté, mais je ne veux pas que les recettes soient redondantes et/ou frustrantes à récupérer à chaque partie.

Je rappelle que comme tous nos visuels et autres panneaux d'interface, l'UI actuelle est fonctionnelle. Ses éléments vont rester, mais elle sera visuellement retravaillée et unifiée lors des refontes graphiques.

2) Maître d'ouvrage: aucun matériau n'est demandé pour désigner un site de construction. Comme pour de nombreux autres jeux, la structure est prévisualisée sous votre souris et vous indique si l'emplacement est valide ou non. Une fois placé, le chantier est indiqué par un petit drapeau aux marqueurs colorés, et son interface de progression s'affiche lorsque vous vous en approchez.

Le principe est simplissime: apporter les matériaux requis pour les étapes disponibles. Appuyer sur construire, et hop, le bâtiment progresse. À tout moment, on peut annuler la construction et détruire le chantier pour restituer ses matériaux.

Pour les structures "en bloc" comme les lanternes, les coffres ou les tables d'artisanat, achever une étape ajoute un petit élément visuel au bâtiment. Pour les salles, c'est un pan de mur entier qui est dressé !

Une fois la dernière étape construite, le bâtiment est instancié et devient fonctionnel.

3) Des catégories flexibles: il y a des nombreuses essences d'arbres, de type de minéraux ou d'espèces animales dans Lampyre. Mais tous leurs produits sont rassemblés dans des catégories d'artisanat, qui elles, sont généralistes. Par exemple, des rondins de chêne gris, de saule ou de hêtre rentrent tous dans la catégorie "rondins de bois".

La vaste majorité des bâtiments vous permet de choisir à loisir le type de bois ou la pierre que vous souhaitez utiliser. La différence sera principalement cosmétique, et pour certains matériaux, il y aura quelques bonus qui leurs seront propres.

Par exemple: une lampadaire en bois peut être fait avec n'importe quel essence d'arbre, mais en utilisant du chêne gris, il aura 50 points de vie en plus.

Pour l'instant, cela vous permet surtout de vous adapter aux ressources qui vous sont disponibles, et pourquoi pas, de créer un thème esthétique dans votre village. Dès que le chantier est posé, vous pouvez restreindre les matériaux de chaque étape à une catégorie entière, ou seulement à certains de ses matériaux. Les villageois respecteront vos choix et n'apporteront que les matériaux souhaités sur le chantier.

Cela s'appliquera également aux recettes d'artisanat plus générales pour rendre la fabrication non contraignante, et les associations de matériaux ludiques !

4) CASSER: ce qui peut être construit, peut être démoli. Les bâtiments peuvent recevoir des dégâts, sur leur intégralité, ou sur des pans de murs spécifiques en ce qui concerne les salles. 

Vos bâtiments peuvent alors être réparés en vous approchant d'eux, ce qui ne demande aucun matériau. Dans le futur, vous pourrez attribuer cette responsabilité à un ou plusieurs villageois qui s'occuperont d'entretenir vos constructions à votre place.

Si les points de vie d'une structure tombent à zéro, elle passe à un état de ruine. Les ruines ne peuvent plus être réparées. Elles ne peuvent qu'être déblayées, et elles vous restitueront alors une partie de leurs matériaux d'origine, s'il en reste. 

Cette mécanique de ruine n'était pas planifiée au départ du bloc. En travaillant sur les bâtiments, j'ai réalisé que je voulais absolument des ruines et des vestiges sur ma carte. Je voulais aussi qu'on ait des marques visuelles du passage destructeur d'une tempête, ou d'une vague d'ombre - qu'il y ait du travail si vous tombiez que les restes d'un village oublié.

Vous pouvez naturellement choisir de vous-même de détruire un bâtiment, si son emplacement ne vous convient plus.

De plus, en ce qui concerne les petites structures comme les coffres ou les décorations, vous êtes libres de les déplacer à votre guise dans un petit périmètre autour de leur position actuelle. Cette opération vide tout l'inventaire potentiel de votre meuble, et elle est impossible à réaliser lorsque des ennemis sont proches - non, vous ne pouvez pas bouger votre canapé si une chimère est en train de mordre dedans.

Les bâtiments subiront des dégâts légers d'usure au fil des saisons, mais pourront surtout être attaqués par certaines grosses chimères, ou par l'ensemble des ombreux si vous subissez un assaut particulièrement frénétique. En temps normal, les petits ombrelgins ne s'en prendront pas à vos structures ("vin dieu, mais lâche ce parpaing, sale bayte !!").

Le joueur n'étant pas forcément omniscient (même si des outils vous aideront à savoir instantanément ce qui est attaqué dans votre village), il est important de ne pas rendre l'attaque des bâtiments frustrante. Vous serez averti des dangers, et vous aurez les armes à disposition pour vous préparer face aux menaces (notamment la lumière).

5) L'équilibre dans la force les ressources: il est important de réfléchir à l'équilibrage des ressources qui vous seront disponibles, et des conséquences de la destruction d'un bâtiment. C'est encore très tôt pour figer un équilibrage dans le marbre (hoho, quel potiblagueur), mais j'ai pour l'instant fait les choix suivants:

- annuler un chantier vous rend l'intégralité des matériaux engagés, et ce à n'importe quelle étape de  construction

- réparer un bâtiment ne coûte aucun matériau, et ce, quel que soit son montant de points de vie

- replacer un petit meuble ne coûte rien (hormis du temps si c'est un stockage et que ça bazarde tout le contenu à terre)

- lorsqu'un bâtiment est détruit, environ 50% de ses matériaux sont totalement perdus, et ce, de façon aléatoire ; environ un tiers des composants survivants s'éparpille immédiatement au pied des ruines, et le restant est contenu dans la ruine pour être restitué à son déblaiement

Cela évite d'avoir une construction et des réparations trop contraignantes ("rah, il me faut combien de brindilles pour réparer le mur arrière déjà ...?"). De plus, cela met l'emphase sur la défense générale de vos bâtiments et vous punit s'ils sont totalement détruits. Cela peut aussi vous pénaliser si vous voulez carrément déplacer une structure. La vie reste rude dans l'univers de Lampyre, et bouger une maison de quatre mètres reste du luxe. D'un autre côté, vous ne devriez pas avoir à démonter un coffre que vous voulez pousser à quelques pas de là.

6) Les fondations sont posées pour la suite: placer un bâtiment ou une salle met bien évidemment la carte de navigation à jour pour les créatures (de façon fluide grâce à nos aventures du bloc précédent, je ne m'en lasse pas). Pour le moment, les salles ne remplissent aucune fonction particulière, mais je tenais à préparer leur implémentation et leur gestion des dégâts. 

À terme, les salles seront des blocs fermés par une porte, avec du sol. Elles pourront être attribuées à vos villageois, et certains meubles comme les lits ou les décorations ne pourront être posés que dans ces pièces closes. La salle aura un certain niveau de confort qui satisfera les besoins de vos alliés, et leur donnera un chez-soi où se détendre (ce sera le bloc de développement Valérie Damidot, incroyable).


La suite

Les choses s’accélèrent, les amis. Nous approchons du premier anniversaire de ce projet ambitieux, et le rythme de développement ne faiblit pas. C'est même plutôt le contraire. 

Nos mécaniques déjà implémentées ont des bases super saines, et même si elles n'interagissent pas immédiatement entre elle, le tissu du gameplay commence à se dessiner autour. Je raisonne de plus en plus en termes de fonctionnalités finales et de ce que je souhaite dans la version 1.0, plutôt qu'en termes d'essais rigolos ou incomplets.

Ce qui est honnêtement, aussi grisant qu'effrayant. Avoir une vague idée de jeu c'est une chose, mais quand on couche une idée de mécanique sur le papier, et qu'il faut passer trois semaines à l'implémenter dans le code, on y réfléchit à deux fois.

Bref, j'ai le plaisir de vous annoncer le thème de non pas UN, mais de DEUX blocs suivants. J'ai nommé: les cultures, et l'artisanat !

La construction a quelque chose de simple et de classique - satisfaisant, fluide, familier même si assez organique. Ces deux prochains blocs sont différents. Je sais que la culture des plantes et la fabrication de tous les objets vont être des piliers de la boucle de jeu, et je sais aussi à quel point ils seront uniques à Lampyre (même si, soyons honnête, il existe rarement une idée de gameplay introuvable ailleurs ; c'est davantage leur mélange et l'alchimie finale qui est propre à un jeu).

Non, vous n'allez pas faire des trous en ligne droite pour planter votre maïs et l'arroser chaque jour. Hun-hun.

C'est pourquoi, tel l'énorme rat que je suis, et contrairement aux articles précédents, je vais m'abstenir de lister ici les fonctionnalités à implémenter. CAR - quelque chose de plus gros arrive. Je cuisine beaucoup de choses pour le projet et j'estime qui est temps de vous le partager de façon plus parlante, et plus professionnelle (oui, je suis un rat professionnel, c'est ce que j'essaie de vous communiquer tous les jours).

Tenez ma bière, alors que je m'installe dans la caisse à savon pour descendre la pente à 16° du village. Restez informés du développement au travers de mes spams quotidiens via @Ariatowl (#Lampyre), et surtout, prenez soin de vous !


Les visuels du schnaps

 

On termine comme à l'habitude avec le florilège des GIF de développement de ce blog.


1) Les filtres du menu de construction ! La barre de recherche cache également automatiquement les plans de bâtiment dont le nom ne correspond pas à vos caractères.


2) Affichage des matériaux des plans de construction. Soit c'est un matériau particulier ("du bois de chêne gris"), soit c'est une catégorie ("rondins de bois"). Vous pouvez alors faire défiler les matériaux pour voir tous ceux qui sont éligibles à ce type.


3) Le placement des bâtiments, tout simple, avec la prévisualisation de la structure terminée. Rien ne vous empêche de placer autant de chantiers que vous le souhaitez (ici les établis apparaissent tous terminés car je n'avais pas commencé la programmation des étapes de construction).


4) La construction, tout simplement. Une fois les matériaux déposés sur le chantier, une étape disponible doit simplement être engagée jusqu'à sa complétion.


5) La carte de navigation qui se met à jour lors de la pose des obstacles et des salles. C'est beau.



6) La destruction de pans de mur et le passage d'une salle en ruine ! Notez la chute des matériaux lorsque le bâtiment se délite. Notez aussi la priorisation des créatures sur les bâtiments dans le choix des cibles (aka les ombrelgins priorisent l'attaque sur le joueur avant l'attaque sur les structures !).

 


7) Les réparations ! Plutôt explicites. S'approcher d'une structure endommagée affiche automatiquement sa barre de points de vie pour qu'on puisse voir qu'elle a subit des dégâts. Je pense que dans le futur, je donnerai un moyen au joueur d'avoir une vision instantanée de tous les dégâts alentours (un peu comme un mode "attentif").



8) Le déblaiement de ruines. Achève le nettoyage des restes de bâtiments après leur destruction, et restitue ce qu'il reste de leurs matériaux d'origine.



9) Le marquage de bâtiments alliés pour destruction. Celle-ci peut être annulée à tout moment, et les structures réparées vers leur état initial.


 

10) Le déplacement de nos petites structures. À vous les ré-organisation de stockages et les séances passionnantes de décoration intérieure quand celles-ci seront implémentées.