# Terraformation — la mécanique-signature > C'est la mécanique qui donne son nom au jeu : le choc entre l'eau et la lave produit de > l'**obsidienne**. Voir `factions.md` pour qui peut faire quoi, `economie.md` pour le lien > avec les ressources, `valeurs.md` pour les chiffrages provisoires. ## Historique Deux modèles ont été écartés avant celui-ci : - l'**automate cellulaire de fluide continu** du concept d'origine (`../CONCEPT.md`) — trop coûteux à faire tourner et à rendre déterministe ; - une grille de **profondeur binaire 0 / -1** posée sur un terrain sans relief — écartée parce qu'elle jetait le relief, et avec lui le bonus de hauteur, la pente, et l'idée que l'eau descend. Le modèle retenu ci-dessous garde **une seule couche** : le relief que le joueur voit est exactement celui que le moteur simule. ## ✅ Une seule couche : le relief EST le terrain de jeu - La carte est une grille de cellules — **96×96 pour commencer**, soit ~9 200 cellules (valeur révisable, voir `valeurs.md`). - Chaque cellule porte : - une **altitude**, en niveaux entiers — c'est le relief naturel de la carte ; - une **surface** (herbe, terre, roche, forêt, cendre, obsidienne…) ; - un **état de lit** : intacte, ou **creusée** — une cellule creusée peut accueillir un fluide ; - éventuellement un **fluide** : eau ou lave. - **Pas de couche gameplay séparée d'une couche décorative.** Les collines, le massif nain et les pentes visibles à l'écran sont de vraies données de simulation. ## ✅ Ce que le relief change - **Bonus de hauteur au combat** : attaquer depuis une cellule plus haute donne un avantage (montant : voir `valeurs.md`). Voir aussi `combat.md`. - **Pénalité de pente** : monter coûte plus de temps que descendre ou avancer à plat. - Conséquence directe recherchée : **creuser est une arme défensive**. Un fossé au bon endroit crée une rupture de pente, ralentit ou bloque le passage — et peut être inondé. ### ✅ La règle de franchissement — un coup de pelle ralentit, deux coups bloquent - **1 niveau d'altitude = 0,5 unité monde**, soit une demi-cellule. Une marche d'un niveau arrive au genou d'une unité, une marche de deux niveaux à sa poitrine. - **Une différence d'un niveau entre deux cellules voisines se franchit** (en montant, plus lentement). **Deux niveaux ou plus, c'est une falaise** : infranchissable, pour tout le monde. Conséquence directe, et c'est la règle que le joueur doit retenir : > **Creuser une fois ralentit. Creuser deux fois bloque.** > Une cellule creusée d'un niveau reste traversable — c'est un canal, un fossé qui gêne. > Creusée de deux niveaux, plus personne ne passe : c'est une douve. Autre conséquence, voulue : les flancs raides du massif nain sont **naturellement infranchissables**, ses approches douces ne le sont pas. Le relief de la carte dessine les couloirs d'attaque sans qu'on ait à les poser à la main. *(Valeurs de départ, révisables — voir `valeurs.md`.)* ### ✅ Ce que voit le joueur quand sa douve coupe une armée en deux La règle vaut aussi **en biais** : une douve d'une seule cellule de large ne se traverse pas en diagonale, parce qu'un pas diagonal exige que les deux cellules du coin soient franchissables. Une douve d'une cellule bloque donc réellement. Et quand la douve se referme devant une armée déjà en marche : **les unités concernées s'arrêtent sur place**. Elles ne viennent pas s'agglutiner au bord du trou — si un chemin de contournement existe, elles le prennent au tick suivant ; s'il n'en existe aucun, elles restent où elles sont. Le détail du comportement est dans `architecture.md` §6. ## ✅ Creuser - Un ouvrier peut **creuser** une cellule **neutre** — ni gisement, ni bâtiment, ni obsidienne. - La cellule **descend d'un niveau**, **relativement à son altitude actuelle** — pas vers une valeur absolue. Creuser à flanc de montagne creuse la montagne, là où elle est. - Une cellule creusée devient un **lit** : elle peut désormais accueillir un fluide. - Les creusages successifs sont possibles, **jusqu'à 3 niveaux sous l'altitude d'origine de la cellule**, et jamais sous l'altitude 0. Au-delà, la cellule ne descend plus. ### ✅ Ce qui n'est pas creusable, exactement Le critère est le **gisement**, pas la surface : une cellule qui porte encore de la ressource (forêt, carrière) se **récolte**, elle ne se creuse pas. Une roche nue, elle, se creuse — sans quoi le massif nain serait le seul terrain du jeu où les Nains ne pourraient pas terraformer, ce qui n'aurait aucun sens. S'y ajoutent l'obsidienne (définitivement) et les cellules bâties. ### ✅ Un ordre de creusage = un niveau Creuser un niveau coûte `DIG_TICKS_PER_LEVEL` (`valeurs.md`) et **un ordre**. Une douve se paie donc en deux ordres sur la même cellule : c'est ce qui rend le geste lisible côté joueur, et ce qui empêche de creuser un gouffre d'un seul clic. L'ouvrier doit être **à portée** (`DIG_REACH_CELLS`) ; s'il ne l'est pas, il ne creuse pas à distance : il attend d'y être. ## ✅ Les fluides ne circulent que dans un lit Règle centrale, et c'est elle qui donne tout son intérêt au creusage : > **L'eau et la lave ne se répandent jamais sur du terrain intact.** Elles ne circulent que > de lit en lit — cellules creusées à la main, ou lit naturel de la source de la carte. Canaliser un fluide, c'est donc **lui tracer son chemin à la pelle**. ## ✅ L'écoulement est gravitaire — un fluide ne remonte jamais À chaque pas de simulation, depuis une cellule remplie, le fluide gagne les cellules de lit **adjacentes (4-voisinage)** dont l'altitude est **inférieure ou égale**. Jamais supérieure. | Voisin de lit | Ce qui se passe | |---|---| | **strictement plus bas** | le fluide **s'écoule** — et quitte la cellule de départ si rien ne l'alimente | | **de même altitude** | le fluide **s'étale** — les deux cellules restent remplies | | **plus haut** | rien, jamais | **L'exemple qui fixe la règle** — trois trous côte à côte sur le flanc d'une montagne, on verse de l'eau dans celui du milieu : **seul le trou du bas se remplit.** L'eau descend, elle ne monte pas, et le trou du milieu se vide puisque rien ne l'alimente. Autrement dit : une cellule ne **retient** un fluide que si elle n'a aucun voisin de lit strictement plus bas. **Seuls les creux retiennent.** ### ✅ La règle exacte, telle qu'elle est codée (`sim/fluid.ts`) Trois lignes, et tout le reste en découle. Une cellule de lit regarde ses quatre voisines : 1. **elle se remplit** si une voisine pleine la domine ou l'égale (`altitude ≥ la sienne`) ; 2. **elle se vide** si elle a une voisine de lit strictement plus basse — *même pleine* — et que rien ne l'alimente d'amont ; 3. **la source ne tarit jamais** (`FLAG_SPRING`), quoi qu'il arrive autour. Conséquences voulues, qu'il faut avoir en tête pour concevoir une carte ou une défense : - un **lit plat** est un creux : il se remplit entièrement et reste plein. C'est ce qui fait qu'un canal creusé de niveau depuis la source **reste plein sur toute sa longueur**, et c'est aussi ce qui permet à qui creuse un fossé de niveau depuis une flaque de le voir se remplir ; - un **lit en pente** ne retient rien : ce qu'on y verse dévale jusqu'au premier vrai creux ; - un fluide dont on coupe l'amont **se retire** de proche en proche. ### ✅ Vitesse de propagation **Une cellule tous les 2 ticks** (5 cellules/seconde) — `valeurs.md`. Comptée en ticks entiers, jamais en secondes flottantes. Une inondation traverse une carte de 96 cellules en ~19 s : assez lent pour qu'on la voie venir, assez rapide pour qu'on ne s'ennuie pas. ## ✅ Deux origines de fluide, deux comportements | Origine | Alimentation | Conséquence | |---|---|---| | **La source de la carte** — rivière ou lac, ou coulée de lave si la carte appartient aux Démons (voir `monde.md`) | **Infinie**, elle alimente en continu | Un lit creusé depuis la source reste plein sur toute sa longueur. **Contrôler la source, c'est contrôler l'eau de la partie.** | | **Le seau** — Hommes : eau, Démons : lave (voir `factions.md`) | **Volume fini**, quelques cellules seulement | La poche versée descend jusqu'au premier creux et s'y arrête. Sur une pente, elle ne reste pas où on l'a versée. | **Ce que « volume fini » veut dire exactement** : le versement **mouille d'un coup** jusqu'à `BUCKET_CELLS` cellules de lit autour du point de versement, sans jamais remonter la pente (`valeurs.md`). Après quoi la poche n'est plus alimentée par personne : elle obéit à la gravité comme n'importe quel fluide, et se retrouve dans le premier creux qu'elle rencontre. La différence avec la source n'est donc pas une quantité qui s'épuiserait cellule par cellule, c'est qu'**il n'y a plus rien derrière** : coupez le passage, la poche meurt ; coupez le passage d'une source, elle continue de pousser. - **Agrandir une source** : creuser une cellule adjacente à un fluide, à altitude inférieure ou égale, la fait remplir par écoulement. **Toutes les races peuvent le faire** — c'est le moyen normal d'amener de l'eau ou de la lave quelque part. - **Créer une poche à partir de rien** : réservé aux **Hommes** et aux **Démons**, sur une cellule creusée. **Une seule charge à la fois**, rechargée **non par un cooldown** mais par quelque chose à débloquer — ❓ **et ce quelque chose n'est pas décidé** (voir `factions.md` et `questions-ouvertes.md`). En attendant, un joueur a **sa charge de départ, et c'est tout** : rien ne la rend. *(Une version du code rechargeait le seau à l'achèvement du bâtiment d'énergie ; ça n'avait jamais été décidé au design, et c'est retiré.)* ## ✅ Interdiction eau/lave directe **On ne peut jamais verser de l'eau directement sur de la lave, ni l'inverse.** Pas d'extinction directe : il faut faire *se rencontrer* deux écoulements. ## ✅ Formation de l'obsidienne Si un flux d'eau et un flux de lave **se rencontrent** — parce qu'un creusage les a connectés, ou parce que deux fronts qui s'étendent finissent par se toucher — la cellule de contact devient de l'**obsidienne** : - **le lit est comblé** : la cellule remonte à l'altitude qu'elle avait avant d'être creusée ; - elle devient **définitivement impossible à recreuser** ; - et **infranchissable** : personne ne marche sur l'obsidienne. C'est un obstacle permanent et indestructible **pour le reste de la partie**. Deux précisions qui tombent de la règle et qu'il vaut mieux savoir : - **l'obsidienne bouche le canal.** Une cellule comblée n'est plus un lit : le fluide d'amont s'arrête net devant elle. C'est le seul moyen du jeu de **fermer définitivement** un canal qu'on a soi-même ouvert ; - **une source peut être tarie.** Si la rencontre a lieu sur la cellule de source elle-même, elle est comblée comme une autre et la carte perd son fluide. C'est rarissime — il faut y amener le fluide adverse — et c'est **assumé** : ce serait le plus beau coup de la partie. ⚠️ **L'obsidienne ne survit pas au match.** Entre deux parties sur la même case, seul le **Monument** persiste (`monde.md`, `architecture.md` §9) : la carte repart propre. L'obsidienne est une cicatrice de bataille, pas une cicatrice du monde. ### ✅ Assumé : l'obsidienne est rare Une carte ne porte **qu'une seule source** — de l'eau, ou de la lave si elle appartient aux Démons (`monde.md`). Il faut donc qu'un joueur Homme ou Démon verse son seau du fluide *opposé* pour qu'une rencontre soit seulement possible : une partie Elfes contre Nains n'en produira jamais. **C'est accepté en l'état, le gameplay ne change pas pour autant.** D'autres façons d'en créer ou d'en trouver restent à imaginer — voir `questions-ouvertes.md`. ## 🟡 Piste non tranchée : l'obsidienne comme méga-ressource Idée retenue pendant la discussion, à creuser plus tard : l'obsidienne pourrait servir d'ingrédient rare pour fabriquer des **super-unités**. Explicitement **pas** retenue comme coût du Monument — le Monument reste sur une économie classique bois/pierre/énergie/nourriture. Rien n'est tranché sur le fonctionnement exact. ## 🟡 Le sous-sol (futur) Le concept d'origine évoquait un sous-sol voxel : galeries de sape, mines, effondrements, sans hiérarchie de couches par race. Le modèle actuel **n'a pas de sous-sol** — creuser abaisse la surface, ça ne perce pas de tunnel. L'extension est explicitement remise à plus tard.