# Valeurs — la table de chiffrage > **🟡 Tout ce qui est ici est provisoire par nature.** Ce fichier existe pour qu'aucun nombre > d'équilibrage ne se retrouve écrit en dur, éparpillé dans le moteur. > > **Contrat** : un seul module de constantes dans le code reflète ce fichier, et rien d'autre > ne définit de valeur d'équilibrage. Ce module est **`sim/tuning.ts`** — et pas `shared/`, > puisque `sim/` n'importe rien d'extérieur (`architecture.md` §5). À terme, ces valeurs vivront > dans **une table en base de données**, modifiable sans redéployer, et seront **injectées à la > création du monde** ; ce fichier restera la référence lisible et commentée. > > Statuts : **✅ arrêté** · **🟡 valeur de départ, à ajuster en playtest** · **❓ non chiffré**. ## Monde et grille | Valeur | Statut | Note | |---|---|---| | Côté de la grille d'une carte | ✅ **288 × 288** (82 944 cellules) | Décidé le 2026-09-06 : chaque axe ×3, surface ×9. `DEFAULT_GRID` fait autorité ; la grille politique reste 5×5. | | Taille du monde | ✅ **5 × 5 = 25 cases**, 4 variantes chacune | Voir `monde.md`. | | Hauteur d'un niveau d'altitude | 🟡 **0,5 unité monde** (une demi-cellule) | Une marche d'un niveau arrive au genou, deux niveaux à la poitrine. C'est ce qui rend la règle de franchissement lisible à l'œil. | | Plage d'altitude | 🟡 **0 à 40 niveaux** (0 à 20 unités monde) | Le terrain des maquettes occupe ~29 niveaux (amplitude mesurée : 14,4 unités) — il reste de la marge. | | Limite de creusage | 🟡 **3 niveaux sous l'altitude d'origine**, jamais sous l'altitude 0 | Garde-fou : empêche le puits sans fond. | ### Génération de carte (`sim/mapgen.ts`) > ### ❓ Les quatre départs ne sont PAS dotés pareil — d'un facteur 74 > > **Mesuré le 2026-08-16, deux fois et sur deux jeux de graines différents** (30 graines chacun, > 96², ressource récoltable au tick 0 dans un rayon de 40) : > > | départ | pierre | bois | > |---|---|---| > | `startCell[0]` — **Hommes** | 2 120 | **1 387** | > | `startCell[1]` — **Elfes** | 2 250 | **101 553** | > | `startCell[2]` — **Nains** | **68 720** | 1 373 | > | `startCell[3]` — **Démons** | 5 590 | 27 000 | > > **×74 sur le bois, ×32 sur la pierre** entre le mieux et le moins bien doté. Structurel, pas > aléatoire : `startCell[1]` a le plus de bois dans **30 graines sur 30**. > > ✅ **La direction est voulue et vérifiée dans le code** : `mapgen` calcule un mélange de biomes > par position et place chaque faction dans le sien — Elfes en forêt, Nains en roche. Et > `plantStartDeposits` **garantit bois et pierre à 8 cellules de chaque départ quelle que soit la > race** : la « première minute » tient partout (1 500 à 2 400 de pierre pour tous). > > ❓ **Le DEGRÉ, lui, n'a jamais été décidé par personne.** Un facteur 74 sur la ressource > présente dans presque tous les coûts n'est pas la même chose qu'un thème : c'est un écart de > puissance, et il **écrase les bonus de faction** — le ×1,5 des Elfes sur le bois pèse > infiniment moins que les 74× de bois sur lesquels ils sont assis. > > ✅ **Et la mesure existe : le facteur 74 ne convertit AUCUNE victoire supplémentaire.** > > On peut faire jouer une race depuis la case d'une autre, et le guichet le permettait depuis > toujours — par son **repli de collision** : deux joueurs de la même race ne pouvant tenir la même > case, le second est posé ailleurs **en gardant sa race** (`shared/protocol.ts`, `taken[]`). Donc > `--factions=0,0` met un **Homme** sur la forêt à 84 800 de bois, et `--factions=1,1` un **Elfe** > sur la même. > > | | emplacement 0 | emplacement 1 | > |---|---|---| > | deux **Hommes** | clairière (1 400 bois) → **13/19** | FORÊT (84 800) → 6/19 | > | deux **Elfes** | FORÊT (84 800) → **15/19** | clairière (1 400) → 4/19 | > > **À race égale, la forêt gagne 6/19 dans un cas et 15/19 dans l'autre.** Ce qui gagne dans les > deux, c'est l'**emplacement 0** — ni le biome, ni la case, ni la race. Ça exclut le biome par le > même témoin qui avait déjà exclu la case. > > ⚠️ **La réserve est lourde et doit voyager avec le chiffre** : c'est mesuré contre une IA qui > **plafonne de toute façon** — elle n'extrait que 650 de pierre là où une ouverture scriptée en > fait 2 180. Une IA qui saurait exploiter 102 773 de bois convertirait peut-être cet avantage. > **Ce résultat ne dit pas que l'asymétrie est inoffensive ; il dit qu'elle ne s'exprime pas > aujourd'hui.** Le ❓ sur le degré reste donc entier — et il attend **quelqu'un qui joue**, pas > une campagne de plus. | Valeur | Statut | Note | |---|---|---| | Relief obtenu | 🟡 **~28 niveaux d'amplitude** | Mesuré sur 8 graines : 0 à 27–30. Cohérent avec les maquettes (~29 niveaux) et il reste de la marge sous 40. | | Passages barrés par la pente | 🟡 **~5 à 6 %** des arêtes entre voisines | Assez pour que le massif nain dessine des couloirs, jamais assez pour couper un joueur : les 4 départs communiquent **au tick 0** — et ce n'est plus une observation mais une **garantie**, la génération taille un col si le relief coupe la carte. ⚠️ **Au tick 0 seulement** : le mot « toujours » était ici et il était faux. Ce que les joueurs creusent ensuite a le droit de couper — voir `monde.md` et `terraformation.md`. | | Goulets d'une cellule | 🟡 **0 % à 96×96 · 5 % à 64×64 · 17 % à 48×48 · 61 % à 32×32** | Une cellule dont le **retrait** sépare les quatre départs. Mesuré le 2026-08-16 sur 400 cartes (4 tailles × 25 cases × 4 variantes), parcours 8 voisins sur `stepAllowed`. ⚠️ **C'est un effet de la taille de la carte, pas un défaut de `carvePass`** — et donc le vrai argument contre l'abaissement de la taille nominale. Un chiffre mesuré à 64×64 ne décrit pas le jeu, dont la nouvelle taille est 288×288 depuis le 2026-09-06. | | Se couper soi-même du reste de la carte | 🟡 **24 cellules de pelle** en médiane à 96×96 | Coupe minimale de sommets isolant une base (rayon 10) des trois autres départs, sur le vrai graphe de `stepAllowed`, 25 cartes ; minimum 4 chez les Nains. Soit une douve de deux niveaux, ~48 coups de pelle, **≈ 2 min 30 d'un ouvrier** ou 36 s à quatre. ⚠️ **Aucun seau n'est nécessaire, et aucune race n'en est privée.** C'est ce chiffre qui a fait rejeter toute interdiction côté fluide : le goulet n'est que le cas à *une* cellule d'une capacité que le jeu accorde partout. Conséquence non résolue : `questions-ouvertes.md` § « Un joueur qu'on ne peut plus atteindre ». | | Côté minimal d'une carte | 🟡 **32 × 32 cellules** | En dessous, la génération **refuse** (elle lève une erreur) au lieu de rendre une carte où les bases ne se posent pas. Mesuré : à 32×32, 60 graines sur 60 donnent quatre bases posables, reliées et pourvues ; à 24×24 la rivière et la coulée coupent la carte sans qu'aucun col ne puisse être taillé. | | Dénivelé imposé au lit de la rivière | 🟡 **4 niveaux** de la source au centre | C'est lui qui garantit qu'un fluide versé en amont **arrive** : un lit plat le retiendrait sur place. | | Bois d'une cellule de bosquet | 🟡 **200** | Posé par la génération. À rejuger par l'Agent 4 avec les quantités de récolte, qui ne sont pas chiffrées. | | Pierre d'une cellule de carrière | 🟡 **300** | Idem. | ### La première minute — les gisements de départ > **C'est le chiffrage qui décide de ce qu'un joueur peut faire dans ses cinq premières > minutes**, et il a longtemps manqué. La génération ne promettait rien : mesuré sur quatre > graines, une base des Hommes avait sa forêt à **35–41 cellules** et sa carrière à **36–45**. > Cinq ouvriers rapportaient **150 bois et 120 pierre en cinq minutes**, quand le Monument en > coûte 1 200 de chaque : **la victoire par Monument était intestable** dans une partie de 30 à > 40 minutes. Les biomes étant par quadrant, aucun choix de position ne pouvait y remédier — un > quadrant des Hommes ne contient ni forêt ni roche. La génération **pose** donc ce qui manque. | Valeur | Statut | Note | |---|---|---| | Distance maximale d'un départ à son bois **et** à sa pierre | 🟡 **8 cellules** (Tchebychev, à pied) | `MAPGEN_START_RESOURCE_RANGE`. À 2,5 cellules/s, l'aller-retour coûte ~6,4 s pour 5 s de récolte : le trajet compte sans écraser le travail. Vérifié par test sur 8 graines × 4 départs, et mesuré sur 60 graines × 6 tailles de carte. | | Distance minimale d'un gisement posé au centre du départ | 🟡 **4 cellules** | `MAPGEN_START_RESOURCE_MIN`. En deçà, la tache mordrait sur l'empreinte de l'hôtel de ville et sur le dégagement des cinq ouvriers. | | Marge entre une tache posée et un gisement existant | 🟡 **2 cellules**, abandonnée si la place manque | `MAPGEN_START_PATCH_MARGIN`. Évite la carrière collée au bosquet ; cède plutôt que de laisser une base sans pierre. | | Taille d'une tache posée | 🟡 **5 à 9 cellules** (3×3, diagonales tirées à pile ou face) | Soit **1 000 à 1 800 bois** ou **1 500 à 2 700 pierre** à portée immédiate. Un carré parfait se verrait à l'œil nu. | **Le revenu réel, mesuré** (carte engendrée, vrai déplacement, 3 ouvriers au bois et 2 à la pierre, le joueur re-cliquant quand un gisement s'épuise) : | | 5 min | 30 min | |---|---|---| | Hommes | +1 350 bois, +950 pierre | +2 600 bois, +2 160 pierre | | Elfes | +1 505 bois, +1 050 pierre | +7 305 bois, +2 640 pierre | | Nains | +750 bois, +765 pierre | +1 470 bois, +4 125 pierre | | Démons | +1 070 bois, +700 pierre | +2 040 bois, +1 800 pierre | Première charge livrée à l'hôtel de ville entre **6,7 et 11,4 s**. À comparer aux 150 bois / 120 pierre en cinq minutes d'avant : **le revenu de la première minute est multiplié par ~9**. ⚠️ **La tache de départ ne dure qu'environ cinq minutes** — c'est délibéré, mais il faut le savoir : passé le premier millier de bois, le revenu retombe au régime des longues distances tant que le joueur n'a pas **essaimé** (un second hôtel de ville près des grands gisements). Les chiffres à 30 min ci-dessus sont un **plancher** : ils ne modélisent aucun essaimage. ## Pièces 3D et échelle > Convention posée par le contrat de pièces — **`client/pieces/`**, voir son > `README.md` §3. Le code de référence est `client/pieces/kit.js` (`ECHELLE`). | Valeur | Statut | Note | |---|---|---| | Taille monde d'une cellule | ✅ **1 unité monde** | La carte nominale de 288×288 fait 288 unités de côté. Tout le reste en découle. | | Origine d'une pièce | ✅ **centre de l'empreinte, au niveau du sol**, la pièce regarde **+Z** | Le moteur ne pose que la position et le cap (rotation Y). | | Humain debout, référence | 🟡 **1,60 unité monde** | Cohérent avec la hauteur d'un niveau : le genou tombe à 1 niveau (0,5), la poitrine à 2 (1,0) — c'est ce qui rend la règle de franchissement lisible à l'œil. | | Ouvrier · mêlée · distance | 🟡 **1,45 · 1,75 · 1,65** | Rayon au sol 0,34 (mêlée 0,38) : une unité par cellule. | | Proportions par race | 🟡 Nains ×0,82 en hauteur / ×1,26 en largeur · Démons ×1,10 · Elfes ×1,06 et plus minces · Hommes ×1 | Dans `placeholders/archetypes.js` (`STYLE`). | | Hauteur des bâtiments | 🟡 ferme **2,1** · caserne/portail **3,2** · hôtel de ville **4,6** · énergie **4,8** · Monument **7,4** | Le Monument est la pièce la plus haute du jeu, et c'est voulu : il se voit de loin et il survit d'une partie à l'autre (`monde.md`). | | Empreintes, en cellules | 🟡 énergie **2×2** · ferme, caserne, Monument **3×3** · hôtel de ville **4×4** | Empreinte fixe posée d'un geste, montée bloc par bloc (`economie.md`). Entier par construction. | | Tolérance d'une vraie pièce sur ces cotes | ✅ **±15 %** | Au-delà, le cercle de sélection, la barre de vie et l'empreinte mentent. | ### ✅ La caméra de jeu — tranchée Mesuré sur `client/pieces/apercu.html` (champ de 38°, écran de 950 px de haut) : | Recul de la caméra | Largeur vue | Hauteur d'un humain à l'écran | Verdict | |---|---|---|---| | **139 unités** — la caméra des maquettes (`mockups/common.js`, pos 80/82/80) | tout le bloc **et la table** | ~16 px | Les bâtiments tiennent, **les unités ne se lisent plus**. C'est un cadrage de diorama. | | **~70 unités** | ~80 cellules, soit presque toute la carte | ~32 px | ✅ **La distance de jeu.** | **La caméra de jeu se tient à 70 unités de recul, pas 139.** Ce n'est pas une raison pour grossir les pièces — l'échelle ci-dessus est cohérente avec la hauteur d'un niveau, et c'est elle qui rend le relief lisible. | Valeur | Statut | Note | |---|---|---| | Recul par défaut | ✅ **70 unités** | Vérifié sur capture : ouvrier, chantier et cellule creusée se lisent tous (`shots/jeu-*.png`). | | Champ de vision | ✅ **38°** | Celui sur lequel les hauteurs ci-dessus ont été mesurées. | | Inclinaison au-dessus de l'horizon | 🟡 **46°** | Plus bas, la moitié de l'écran part dans le hors-carte ; plus haut, le relief s'aplatit et on ne lit plus les falaises — or c'est le relief qui décide du passage. | | Bornes du zoom | 🟡 **22 à 130 unités** | Assez près pour lire une pièce, assez loin pour voir venir une armée. | | Défilement au clavier / au bord d'écran | 🟡 **34 cellules/s**, proportionnel au recul | À hauteur de vue constante, le défilement doit couvrir l'écran dans le même temps. | Le code de référence est **`client/game/scene.js`** (`DISTANCE_JEU`, `DISTANCE_MIN`, `DISTANCE_MAX`) — ce sont des valeurs de **rendu**, pas de simulation : elles n'ont rien à faire dans `sim/tuning.ts` (`architecture.md` §1). ## Terrain et fluides | Valeur | Statut | Note | |---|---|---| | Pente maximale franchissable | 🟡 **1 niveau** entre deux cellules voisines | **2 niveaux ou plus = falaise**, infranchissable. D'où la règle joueur : *creuser une fois ralentit, creuser deux fois bloque.* Voir `terraformation.md`. | | Vitesse de propagation d'un fluide | 🟡 **1 cellule tous les 2 ticks** (5 cellules/s) | Entier par construction, donc déterministe. À cadence nominale, 288 cellules représentent ~58 s de propagation rectiligne. | | Volume d'un seau | 🟡 **12 cellules** | **Cellules mouillées au moment du versement**, jamais plus — après quoi la poche n'est plus alimentée et obéit à la gravité. Assez pour un bassin qui compte, trop peu pour une rivière. Voir `terraformation.md`. | | Temps de creusage d'un niveau par un ouvrier | 🟡 **3 s** (30 ticks) | Une douve (2 niveaux) coûte donc 6 s de travail par cellule, et **deux ordres**. | | Temps de versement d'un seau | 🟡 **1 s** (10 ticks) | Une fois l'ouvrier à pied d'œuvre. | | Portée de travail d'un ouvrier | 🟡 **1 cellule** (Tchebychev) | Il creuse et verse la cellule sous ses pieds ou l'une des huit qui la touchent. À 0, il faudrait se tenir *dans* la douve qu'on creuse — ce qui n'a pas de sens quand elle devient infranchissable. | | Bonus d'attaque depuis une cellule plus haute | 🟡 **+20 % de dégâts** | Dès 1 niveau d'écart, sans cumul au-delà. Voir `combat.md`. | | Coût de déplacement en montée | 🟡 **×1,6** par niveau monté | Descendre : ×0,9. À plat : ×1. Ces multiplicateurs servent **deux fois** : au coût du chemin, et à la vitesse réelle de l'unité sur le pas (`speed / multiplicateur`). | | Coût d'un pas en diagonale | 🟡 **×√2** | Et jamais permis si l'une des deux cellules du coin est infranchissable — sinon une douve d'une cellule se traverserait en biais. | | Franchissement des fluides | 🟡 **eau : traversable** (×2 de coût) · **lave : infranchissable** | Nécessaire au pathfinding. On peut toujours **sortir** d'une cellule de lave : une unité rattrapée par une coulée n'est pas murée sur place. À rejuger : la lave devrait peut-être infliger des dégâts plutôt que bloquer. | ## Déplacement > Chiffré par l'agent du pathfinding, faute de quoi rien ne pouvait bouger. La **vitesse** des > unités reste à réviser avec le reste de leurs statistiques (session dédiée aux unités). | Valeur | Statut | Note | |---|---|---| | Vitesse d'un ouvrier | 🟡 **2,5 cellules/s** | Soit 0,25 cellule par tick. Traverser 288 cellules à plat prend ~115 s. | | Vitesse d'une unité de mêlée | 🟡 **3 cellules/s** | | | Vitesse d'une unité à distance | 🟡 **2,75 cellules/s** | | | Rayon d'occupation d'une unité | 🟡 **0,34 cellule** | Repris du rayon au sol des pièces 3D (§ Pièces). Sert à la séparation ; remplacé par `entity.radius` dès qu'il est renseigné. | | Distance d'arrivée | 🟡 **0,20 cellule** | En deçà, l'unité se déclare arrivée. Elle redevient inactive — **sauf en état de métier**, qu'elle garde (`architecture.md` §6). | | Poids de la séparation | 🟡 **0,6** du pas | C'est aussi le **plafond** de la poussée : elle ne peut donc jamais annuler le pas. À 1, une unité qui bute sur une camarade à l'arrêt s'immobiliserait pour toujours — c'est arrivé. | | Rayon d'étalement à l'arrivée | 🟡 **6 cellules** | Chaque unité en marche réserve *sa* cellule d'arrivée dans ce rayon autour du point visé : cent unités s'étalent en anneau au lieu de s'empiler — **sans** multiplier les champs de flux, qui restent celui de la destination commune. | | Rayon de rattrapage d'une destination infranchissable | 🟡 **4 cellules** | Cliquer sur une falaise fait viser la cellule franchissable la plus proche. Au-delà, l'ordre n'a pas d'effet. | | Nombre maximal de champs de flux vivants | 🟡 **24** | Donc de destinations distinctes suivies en même temps, tous joueurs confondus. ~324 Ko par champ à 288×288. Au-delà, les unités surnuméraires se guident à vue. | ## Économie > Tout ce bloc a été chiffré par l'**Agent 4** et vit dans `sim/tuning.ts`. L'échelle de > référence : **un ouvrier rapporte ~10 unités toutes les ~8 s**, trajet compris, soit > ~1,2 unité/s. Cinq ouvriers font ~6 unités/s au départ, une vingtaine en font ~25. C'est cette > échelle qui rend lisibles tous les coûts ci-dessous, et la partie de 30 à 40 min visée. > > ⚠️ **Les deux moitiés de l'économie ne se chiffrent pas de la même façon** (`economie.md`) : le > bois et la pierre se comptent en **rendement par cycle d'ouvrier**, la nourriture et l'énergie > en **cadence par bâtiment**. Une ferme vaut à peu près un ouvrier (1 nourriture/s) mais ne coûte > aucun temps d'ouvrier : elle coûte une construction et une place au sol à défendre. | Valeur | Statut | Note | |---|---|---| | Ouvriers au départ | ✅ **5** | Voir `economie.md`. | | Ressources au départ | 🟡 **300 bois · 200 pierre · 100 énergie · 200 nourriture** | De quoi poser une ferme (100 bois) et tenir jusqu'aux premiers retours. | | Durée d'un cycle de récolte | ✅ **5 s** | Voir `economie.md`. | | Quantité récoltée par cycle | 🟡 **10** (forêt, carrière — les seuls gisements) | Le fameux X. Un cycle = **une charge** : l'ouvrier repart au dépôt à chaque cycle. | | Réserve d'une cellule | 🟡 forêt **120 bois** · carrière **200 pierre** | Une forêt épuisée redevient de la terre (le rendu doit le voir). | | Distance de travail sur une cellule | 🟡 **1,5 unité monde** du centre de la cellule | Une case voisine, diagonale comprise. | | Distance de dépôt et de chantier | 🟡 **1 unité monde au-delà de l'empreinte** | Mesurée jusqu'à la peau du bâtiment, pas jusqu'à son centre. | | Force de la spécialisation par race (pierre/bois/énergie) | 🟡 **×1,5** | Bonus seul, **jamais de malus** : la différence est dans la facilité, pas dans l'accès. S'applique à la récolte d'un gisement **et** à ce que verse un bâtiment de production — sans quoi « Hommes et Démons facilitent l'énergie » ne voudrait rien dire, puisqu'il n'existe aucun gisement d'énergie. | | Bonus de nourriture près de l'eau (Hommes) / de la lave (Démons) | 🟡 **×1,25** | Rien pour les Elfes et les Nains. Voir `factions.md`. | | Bonus d'énergie près d'un fluide, **toutes races** | 🟡 **×1,25** | L'eau ou la lave « alimente » le bâtiment ; le moulin à vent tourne sans, en moins bien. | | Rayon de recherche du fluide autour d'un bâtiment | 🟡 **2 cellules** autour de l'empreinte | | | Écart d'altitude toléré sous une empreinte | 🟡 **1 niveau** | Au-delà, le sol refuse le bâtiment. | | Plafond d'un stock | 🟡 **30 000 unités** | **Garde-fou, pas équilibrage** : les stocks sont en Q16.16 dans un `Int32`, qui déborde à 32 767. | ### Production passive — ce qu'un bâtiment verse tout seul Un bâtiment de production **terminé** verse dans le stock de son propriétaire à cadence régulière, sans personne dessus, tant qu'il est debout (`economie.md`). Chaque bâtiment tient sa propre phase, celle de son achèvement : deux fermes ne versent pas au même tick. | Valeur | Statut | Note | |---|---|---| | Cadence d'un bâtiment de production | 🟡 **5 s** (50 ticks) | La même que le cycle d'un ouvrier, volontairement : les deux moitiés de l'économie se lisent sur la même horloge. | | Nourriture versée par une **ferme** | 🟡 **5** par cadence, soit **1/s** | Environ un ouvrier — sauf qu'elle ne consomme pas d'ouvrier. Trois fermes (3/s) font tourner une caserne en continu (une unité de mêlée à 60 nourriture toutes les 15 s). | | Énergie versée par un **bâtiment d'énergie** | 🟡 **4** par cadence, soit **0,8/s** | Un peu moins : il est le seul débouché de l'énergie et il porte deux bonus cumulables (spécialité Hommes/Démons ×1,5, fluide ×1,25). Chez un Homme collé à sa rivière il monte à **1,5/s**, ce qui reste sous un ouvrier bien placé. | *(Une version antérieure faisait de la ferme et du bâtiment d'énergie des « sites de travail » où un ouvrier venait produire — 8 par cycle et par ouvrier, 4 ouvriers par site. C'est **abandonné**, voir `economie.md` et `questions-ouvertes.md`.)* ### Bâtiments — coût, chantier, PV Le temps de chantier est en **ticks-ouvrier** : deux ouvriers montent deux fois plus vite. Les **empreintes** ne sont pas ici — elles viennent du contrat de pièces (§ « Pièces 3D »), et la simulation les reprend telles quelles. | Bâtiment | Coût (bois/pierre/énergie/nourriture) | Chantier | PV | Statut | |---|---|---|---|---| | Ferme | **100** / 0 / 0 / 0 | 20 s | 400 | 🟡 | | Bâtiment d'énergie | **120 / 60** / 0 / 0 | 25 s | 500 | 🟡 | | Caserne (Portail) | **150 / 80** / 0 / 0 | 30 s | 700 | 🟡 | | Hôtel de ville | **250 / 150** / 0 / 0 | 45 s | 1 200 | 🟡 | | **Monument** | **1 200 / 1 200 / 900 / 600** | **300 s** | 2 000 | 🟡 | Le Monument est volontairement lourd : ~3 900 unités de ressources **et** 5 minutes de travail d'ouvrier, soit plusieurs minutes de toute l'économie d'un joueur. C'est ce qui garde la victoire militaire compétitive sur une partie de 30 à 40 min (`combat.md`). **Est-il atteignable ? Oui, depuis que les gisements sont à portée** — le coût n'a pas bougé, c'est la carte qui a changé (§ « La première minute »). Le compte, avec les cinq ouvriers de départ et rien d'autre : - **bois et pierre** : 1 200 de chaque. Les cinq ouvriers en rapportent ~2 300 en cinq minutes, stock de départ compris (300 bois, 200 pierre) le seuil des deux tombe entre la **5ᵉ et la 8ᵉ minute** ; - **énergie (900) et nourriture (600)** : elles ne passent pas par l'ouvrier — la ferme verse 1/s et le bâtiment d'énergie 0,8/s, tout seuls (`economie.md`). Deux fermes couvrent les 600 de nourriture en **5 min**, deux bâtiments d'énergie chez les Hommes (spécialité ×1,5) les 900 d'énergie en **6,3 min**. Leur construction coûte 440 bois et 120 pierre, à prendre sur le compte ci-dessus ; - **le chantier** : 300 s-ouvrier, soit **100 s à trois ouvriers**. Une course au Monument aboutit donc autour de la **15ᵉ à 20ᵉ minute** d'une partie de 30 à 40 — assez tard pour que l'adversaire ait le temps de venir le renverser, assez tôt pour que la menace pèse. Avant, il aurait fallu **plus d'une heure** rien qu'en bois. Le chiffrage du coût reste 🟡 : c'est un arbitrage de design, pas une contrainte technique. > ✅ **Ce calcul est le seul de cette page à avoir été confirmé par une partie jouée** (2026-08-16, > `tools/autojeu.ts`) : **12 min 07 s de médiane**, **6 victoires par Monument sur 6 graines**, > 96², étendue de 11 min 28 à 12 min 09 — soit 41 secondes entre la plus rapide et la plus lente. > Le calcul annonçait 15 à 20 ; **la mesure tombe un peu en dessous**. ⚠️ Adversaire **inerte** — > garde-fou détaillé dans « Partie et réseau » plus bas. > > ⚠️ **Mais la phrase « assez tard pour que l'adversaire ait le temps de venir le renverser » est > devenue une promesse en sursis** : depuis le 2026-08-16 on sait qu'un joueur peut se rendre > **inatteignable** pour ~24 coups de pelle, ce qui rend son Monument imprenable — exactement ce > que `combat.md` interdit en toutes lettres. Voir `questions-ouvertes.md` § « Un joueur qu'on ne > peut plus atteindre ». Un bâtiment naît à **10 %** de ses PV et les gagne linéairement avec l'avancement du chantier. ## Unités et combat | Valeur | Statut | Note | |---|---|---| | Roster : 1 unité à distance + 1 de mêlée par race | ✅ (principe) | Mêmes nombres pour les 4 races : la faction change la silhouette, pas les statistiques. | | Coût et temps de production | 🟡 ouvrier **50 nourriture / 8 s** · mêlée **20 bois + 60 nourriture / 15 s** · distance **40 bois + 20 énergie + 50 nourriture / 18 s** | Chiffré par l'Agent 4 : sans coût ni durée, un bâtiment ne produit rien. L'unité à distance est le seul débouché militaire de l'énergie. | | PV | 🟡 ouvrier **60** · mêlée **100** · distance **70** | | | Rayon au sol | 🟡 **0,34** (mêlée **0,38**) | Repris du contrat de pièces. | | **Laisse** (`LEASH_RANGE`) | 🟡 **12 cellules** | Distance maximale entre une unité et son **poste** avant qu'elle ne lâche une poursuite qu'on ne lui a pas commandée et n'y retourne (`combat.md` § Le poste et la laisse). Choisie **supérieure au rayon d'acquisition** (7) : sinon une unité postée décrocherait avant même d'avoir rejoint ce qu'elle vient de repérer, et ne défendrait plus rien. Et assez courte pour qu'une escouade appâtée ne traverse pas un quart de carte — 12 cellules restent une portée locale sur la carte agrandie. | | Vitesse de déplacement | 🟡 voir § Déplacement | Chiffrée par l'Agent 3 : sans elle, rien ne bouge. | | Production simultanée | 🟡 **une unité à la fois par bâtiment**, sans file d'attente | Le joueur relance quand ça sort. | | Cap de population | ❓ | Non abordé. | | Contre-unités (« la lance bat le cavalier ») | ❓ | Aucune. Les deux seuls modificateurs de dégâts sont la hauteur et le bonus contre les bâtiments. | ### Dégâts, portée, cadence > Chiffré par l'**Agent 7**. L'échelle de référence : un **duel de mêlée dure une dizaine de > secondes** — assez pour qu'un renfort arrive, assez court pour qu'une charge tranche —, et > **dix unités de mêlée abattent un hôtel de ville en une dizaine de secondes** elles aussi : > une armée qui perce doit conclure, sinon la partie ne finirait pas dans les 30 à 40 min visées. | Unité | Dégâts par coup | Cadence | Portée | Dégâts/s | Statut | |---|---|---|---|---|---| | Mêlée | **10** | 1,0 s | **1,25 cellule** (le contact) | 10 | 🟡 | | À distance | **8** | 1,2 s | **5 cellules** | 6,7 | 🟡 | | Ouvrier | **3** | 1,5 s | 1 cellule | 2 | 🟡 | | Valeur | Statut | Note | |---|---|---| | Bonus d'attaque depuis une cellule plus haute | 🟡 **+20 % de dégâts** | Dès 1 niveau d'écart, **sans cumul** au-delà. Voir `combat.md` et § Terrain. | | Dégâts **contre un bâtiment** | 🟡 mêlée **×1,5** · à distance **×0,5** · ouvrier **×0,5** | La hache et la masse abattent un mur, le trait non. C'est ce qui oblige à mélanger les deux au lieu de masser des archers — et sans ce bonus, raser un hôtel de ville prendrait deux minutes à dix unités. | | Portée d'acquisition automatique | 🟡 **7 cellules** | Volontairement au-dessus de la portée du tir : un archer avance un peu pour engager ce qu'il repère, il ne recule jamais. Seules les **unités militaires au repos** acquièrent — jamais un ouvrier. | | Période d'acquisition automatique | 🟡 **5 ticks** (0,5 s), décalée par index d'unité | **Budget de calcul, pas règle de jeu** : le balayage est en O(entités), l'étaler donne un demi-seconde de réaction pour un cinquième du coût. Mesuré : 1,1 ms par tick avec 200 unités en pleine mêlée. | | Portée mesurée jusqu'à… | ✅ la **peau** d'un bâtiment, le **centre** d'une unité | Sinon aucune unité n'atteindrait un hôtel de ville de 4×4, dont le centre est occupé par le bâtiment lui-même. | ### Vision — le brouillard de guerre > Chiffré avec le brouillard (`brouillard.md`). **Une seule règle gouverne toute la table : > on voit plus loin qu'on ne frappe.** Une unité à distance qui verrait à 5 et tirerait à 5 > n'engagerait qu'au moment où l'ennemi est déjà sur elle : sa portée ne lui servirait à rien. > > portée d'arme < portée d'acquisition (7) < rayon de vision > > La seconde inégalité compte autant que la première, et pour une raison de code : l'acquisition > mesure une distance **continue** entre deux positions, la vision est tramée en **cellules > entières**. Deux unités à 7,0 d'écart peuvent se retrouver à 8,4 cellules d'index — d'où la > marge de deux cellules sur la mêlée, sans laquelle une acquisition légitime serait refusée > par le brouillard *parfois*, ce qui est le pire des défauts. | Entité | Rayon de vision | Statut | Note | |---|---|---|---| | Ouvrier | **6 cellules** | 🟡 | Il travaille, il n'éclaire pas. | | Mêlée | **9 cellules** | 🟡 | Deux cellules au-delà de son acquisition. | | À distance | **11 cellules** | 🟡 | **Plus du double de sa portée de tir** : c'est l'éclaireur du jeu. | | Hôtel de ville | **11 cellules** | 🟡 | De quoi voir sa propre base en entier. | | Caserne | **9 cellules** | 🟡 | | | Ferme, bâtiment d'énergie | **7 cellules** | 🟡 | Ils voient leur cour, pas plus. | | Monument | **12 cellules** | 🟡 | Il domine, et sa chute doit se voir venir. | | Valeur | Statut | Note | |---|---|---| | **Clairière de départ** (`START_REVEAL_RADIUS`) | 🟡 **18 cellules** | Le terrain qu'un joueur connaît déjà au tick 0 autour de sa base (`brouillard.md` §1 bis). ⚠️ **Ne se compare pas aux rayons ci-dessus** : ceux-là disent ce qu'on *voit* — unités comprises — celui-ci ne marque que « déjà exploré », c'est-à-dire la **forme du terrain**, sans un seul renseignement. Il peut donc être bien plus grand sans rien donner. Le chiffre vient du cadrage : la caméra de jeu montre 48 × 42 cellules, un disque de 36 remplit l'écran d'ouverture sans le déborder. | | **Recul de la caméra** (`DISTANCE_JEU`) | 🟡 **44 unités** | Soit **48 × 42 cellules** à l'écran (champ 38°, inclinaison 46°). Était à **70** — 76 × 67 cellules, plus de la moitié d'une carte 96², un ouvrier de douze pixels : c'est là qu'était l'écran « noir à 85 % », pas dans le brouillard. Bornes du zoom : 22 à **90** (le plafond de 130 montrait la carte entière et son hors-bord, ce que fait déjà la minimap). | | Le relief donne-t-il de la vision ? | ✅ **non** | Une crête ne voit pas plus loin qu'une plaine — ce serait une seconde règle de hauteur, et il y a déjà celle du combat. Aucune ligne de vue non plus : le disque est plein. | | Forme du champ de vision | ✅ **un disque de cellules**, rayon arrondi vers le bas | `dx² + dy² ≤ r²`, entièrement en entiers. | | Coût de calcul | ✅ **0,10 à 0,12 ms par tick** (96×96, 4 joueurs, 200 entités) | Et 0,008 ms quand rien n'a bougé. Soit 0,1 % du budget d'un tick à 10 Hz. `bun run sim/__tests__/bench-vision.ts`. | ## Partie et réseau > ### 🟠 La durée d'une partie : 30 à 40 min visées, **8 min 14 s mesurées** > > **Première mesure d'équilibrage du projet** — `tools/autojeu.ts`, 2026-08-15, 96², sans > navigateur. Durée **médiane 8 min 14 s** à 2 joueurs, **9 min 32 s** à 4, et **zéro victoire par > Monument sur 44 parties**. Remesuré après la réécriture de `mapgen` : inchangé. > > 🔴 **TOUS LES CHIFFRES DE CET ENCADRÉ SONT « EN TERRAIN HOMMES ».** Découvert le 2026-08-16 par > C8, sur son propre banc : il ne jouait **qu'une variante de case depuis le début**, celle des > Hommes. Or la variante décide du **fluide de la source**, donc du terrain — il mesurait un quart > du jeu. **Ces mesures ne sont pas fausses, elles sont partielles**, et il faut le dire chaque > fois qu'on les cite. Le banc répartit désormais les quatre races (`--variantes`) ; les chiffres > ci-dessous seront à remesurer. > > ⚠️ **Ne conclus pas trop vite, et c'est C8 qui pose le garde-fou lui-même.** Ces parties sont > jouées par une **ouverture scriptée qui attaque à la troisième minute**. Ça mesure donc **à > quelle vitesse une base tombe quand on la rue dessus**, pas la durée d'une partie entre deux > joueurs qui se développent, s'observent et se craignent. Les deux nombres ne mesurent pas la > même chose. > > Ce qu'on peut en dire sans excès : **il n'existe aujourd'hui aucune raison de croire aux 30-40 > minutes**, et une partie peut être finie en huit. Trancher demande de mesurer avec des > adversaires qui ne se ruent pas dessus : c'est l'IA de C2, réglée par l'arène de C8. > > ⚠️ **Les valeurs de cette page restent 🟡 jusque-là.** Elles n'ont jamais été éprouvées par une > partie entière avant cette mesure ; elles le sont maintenant par une seule forme de partie. > > ### 🔴 Sept parties sur dix ne se terminent pas (2026-08-16, 150 parties) > > **150 parties IA contre IA**, 96², variantes réparties sur les 4 races, plafond d'**une heure de > jeu** : **43 terminées (29 %)**, toutes par élimination ; **107 atteignent le plafond sans > vainqueur (71 %)** ; **0 Monument**. Les parties qui finissent durent **10 min 31 s** de médiane. > > C'est le chiffre qui manquait à `questions-ouvertes.md` § « La partie qui ne finit jamais », et > il est **sévère**. ⚠️ Mesuré **contre cette IA-là**, qui ne joue ni la spécialité énergie ni le > bonus de ferme ; `abandon` est hors de portée du banc (ni réseau ni déconnexion), donc « 0 > abandon » n'est pas un résultat. > > ### ❓ L'énergie n'a qu'un débouché **en pratique** — et c'est parce que le Monument n'aboutit jamais > > ⚠️ **Vérifié dans les tables le 2026-08-16, parce que la première version de ce paragraphe était > fausse.** J'y avais écrit, en reprenant un agent sans contrôler, que « l'énergie n'apparaît > qu'une seule fois ». **Elle apparaît deux fois**, et la seconde change tout : > > | poste | coût en énergie | > |---|---| > | unité à **distance** | **20** | > | **Monument** | **900** — soit 23 % de son prix total | > > L'énergie n'est donc **pas** une ressource mal dotée : c'est la **deuxième ressource du > Monument**. Le ×1,5 des Hommes et des Démons est, dans les faits, **un bonus sur la voie > longue**. > > 🔴 **AVERTISSEMENT DE LECTURE, ET IL VAUT POUR TOUT CE BLOC.** Ce qui suit distingue deux > natures de faits, et **elles n'ont pas la même durée de vie** : > > | nature | exemple | vaut jusqu'à | > |---|---|---| > | **les tables** — de l'arithmétique sur `sim/tuning.ts` | l'énergie vaut 900 des 3 900 du Monument | qu'on change le barème | > | **le comportement d'un joueur artificiel** | « l'IA ne bâtit jamais de bâtiment d'énergie » | **qu'on corrige l'IA** | > > **Trois affirmations de la seconde catégorie ont été écrites ici le 2026-08-16 et retirées le > même jour**, parce que l'IA qui les avait produites **se bloquait au tick 3 000** sans que > personne le sache : un chantier calé empêchait d'en commencer un autre, et elle restait figée à > cinq bâtiments pour le reste de la partie. Elle n'atteignait pas la branche d'énergie parce > qu'elle n'atteignait **plus aucune branche**. Après correction, **sans qu'une ligne de l'ordre > des branches ait changé** : normale 11 bâtiments dont **2 d'énergie**, rude 16 dont **3**. > > **Ne cite jamais une mesure de comportement d'IA comme une propriété du jeu.** > > --- > > **Ce qui tient, et qui vient des tables :** l'énergie n'a que **deux** débouchés, et le second > est le Monument. **Ce qui tient aussi, d'une mesure indépendante de l'IA :** 0 Monument sur > 150 parties (l'arène). D'où l'énoncé prudent : > > > **En pratique, l'énergie n'a qu'un débouché — le tireur, à 20 l'unité — parce que le seul > > autre est une victoire que personne n'obtient. Un ×1,5 ne vaut que ce qu'on a à dépenser, > > et ici ce qu'on a à dépenser dépend d'une condition de victoire qui n'arrive pas.** > > ⚠️ **Le plafond de tireurs est arithmétique, sa portée ne l'est pas.** > `STARTING_RESOURCES` = `[300, 200, 100, 200]`, `COST_RANGED` = `[40, 0, 20, 50]` : **100 ÷ 20 = > 5 tireurs** avec la seule dotation de départ. C'est vrai pour toujours. Mais **« et personne ne > bâtit jamais d'énergie, donc c'est le plafond réel » était une phrase de la seconde catégorie**, > et elle est tombée avec le correctif de l'IA. Le plafond de départ reste un fait ; le plafond > **effectif** dépend de ce que le joueur bâtit, et il faut le remesurer. > > **Rien ne doit être « ajusté » ici tant que le Monument n'est pas bâti en partie** — c'est la > seule des quatre faces qui n'ait pas bougé, et la seule qui ne dépende d'aucune IA. On > corrigerait des symptômes. > > ⚠️ **`rules/factions.md` n'est pas mis en cause**, et l'essai décisif prévu **ne pourra pas le > mettre en cause** : C2 l'a signalé avant que C8 ne lance. Son IA jouera « la moitié qu'elle peut > jouer » — on ne peut pas jouer une spécialité d'énergie quand il n'y a rien à en acheter. Si > l'écart entre races tient malgré la correction, **ce ne sera pas concluant**. On ne touche à > aucun barème d'ici là. > > ### ✅ Le zéro Monument est expliqué — et il ne disait rien du prix (2026-08-16) > > Cet encadré concluait « le zéro Monument sur 44 dit la même chose autrement — la voie longue > n'a jamais le temps d'aboutir ». **C'était faux, et la phrase est retirée plutôt que nuancée.** > > Trois causes étaient possibles : le Monument trop cher, les parties trop courtes, ou **une > ouverture qui ne le tente jamais**. C8 a mesuré la troisième : avec une ouverture qui le > **vise**, **6 victoires par Monument sur 6 graines, durée médiane 12 min 07 s** (96², adversaire > inerte), étendue 11 min 28 – 12 min 09. Les premières du projet. Le Monument n'est donc **ni trop > cher ni hors de portée du temps de jeu**. > > ⚠️ **Ce paragraphe a d'abord annoncé « 3 sur 6, médiane 17 min 27 », avec un garde-fou expliquant > que « l'ouverture épuise les gisements à portée ».** Les deux étaient faux, et la seconde est la > faute la plus instructive : **c'était une interprétation, pas une mesure**, et elle est entrée > dans le corps de l'entrée comme un fait. Le vrai défaut était dans le banc — l'ouverture n'avait > qu'un bâtisseur et `prochainDuPlan` comptait un chantier comme « possédé », donc elle > **abandonnait chaque chantier pour poser le suivant**. Mesuré : trois bâtiments en chantier au > tick 12 000, **encore en chantier au tick 36 000**. Un chantier ne produit rien, donc les fermes > n'ont jamais fait de nourriture — **bois 1 460 ✔, pierre 2 180 ✔, énergie 4 342 ✔, nourriture > 0 ✖** sur 600 requis. Trois ressources très au-dessus du prix, la quatrième à zéro. > > **Le garde-fou qui RESTE, et il est le seul :** l'adversaire est **inerte** — personne ne vient > casser un chantier de 300 s. Ça dit *« le Monument est atteignable »*, pas *« le Monument est > équilibré »*. > > ⚠️ **Et l'instrument a failli devenir le résultat, pour la deuxième fois.** Premier passage : > 0 Monument sur 6 et 239 unités immobiles. Bois, pierre et énergie étaient **tous au-dessus du > prix** ; seule la nourriture restait **bloquée à 200** pour un Monument qui en coûte 600 — > parce qu'un ouvrier coûte 50 de nourriture et que l'ouverture en produisait sans limite > (80 ouvriers, dont 64 immobiles faute de gisement à portée). **Elle dépensait en ouvriers > exactement la ressource qui lui manquait.** Sans ce coup d'œil, la conclusion publiée aurait été > « le Monument est inatteignable » — c'est-à-dire l'inverse du fait. | Valeur | Statut | Note | |---|---|---| | Durée cible d'une partie | 🟠 **30 à 40 min visées — 8 min mesurées** | ⚠️ **La première mesure du projet la contredit.** Voir l'encadré ci-dessous. | | Joueurs par partie | ✅ **2, 3 ou 4**, chacun pour soi | Voir `matchmaking.md`. | | Délai d'annulation d'un lobby qui ne se remplit pas | ✅ **5 min** | Voir `matchmaking.md`. | | Délai de reconnexion avant défaite par abandon | ✅ **2 min** | Voir `combat.md`. | | Fréquence de simulation (tick) | ✅ **10 Hz** | Voir `architecture.md`. Le rendu, lui, interpole à la fréquence de l'écran. | | Latence d'ordre (planification à T+n ticks) | ✅ **2 ticks (200 ms)** | Voir `architecture.md`. | | Période de vérification du hachage d'état | ✅ **50 ticks (5 s)** | Voir `architecture.md`. |