|
JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
|
Statut : fait (vérification automatisée : build /W4 /WX sans avertissement, ctest à 1009/1009, clang-format, les six lints, cahier de test et Doxygen verts). Prérequis : aucun. Alimente LOT-67, LOT-68, LOT-69, LOT-76.
Exigences refondues : EX-ARCH-022 (racine), EX-DEC-003, EX-DEC-032, EX-DEC-043, EX-REN-032, EX-REN-041, EX-IHM-053, EX-IHM-070, EX-IHM-073, EX-EDIT-041, EX-EDIT-045. Exigences tenues sans changement : EX-IHM-071, EX-IHM-072.
L'interface était celle du jeu de plateforme dont ce dépôt est issu. Ce lot lui substitue l'identité du parchemin de Tanares — parchemin, encre sépia, filets et cabochons dorés, titrage à empattements — et retire du code les cinq widgets qui n'existaient que pour le pixel art.
La palette d'identité, relevée sur le corpus (Character_Sheets_Tanares.pdf) et écrite aux deux seuls endroits qui la portent : Source/HMI/Interface/DesignTokens.cpp et .design-mockups/_page_head.html.
Cinq modules neufs dans Source/HMI/Interface/ — IdentityScale, ParchmentFrame, ParchmentPanel, FocusMarker, MenuEntryButton — en remplacement des cinq modules pixel art (641 lignes supprimées).
La refonte des onze exigences qui imposaient le pixel art, à commencer par la racine EX-ARCH-022.
Chaque teinte vient de l'histogramme quantifié des pages rendues des feuilles de personnage. La raison est celle du §4 du corpus (EX-CNT-020), transposée à la couleur : une couleur inventée ressemble à la source sans en venir, et rien ne le dit jamais. Six mois plus tard, personne ne sait plus laquelle des deux on regarde.
| Rôle | Valeur | Ce que c'est dans la feuille |
|---|---|---|
| background | #d0c0a0 | parchemin vieilli, le bord de la feuille |
| surface | #e0d0b0 | le champ, là où l'on écrit |
| surfaceAlt | #f0e0d0 | l'encadré clair |
| text | #302000 | l'encre sépia |
| textMuted | #705020 | l'encre délavée |
| accent | #c0a060 | l'or des filets |
| frameEdge | #302000 | le trait extérieur |
| frameOrnament | #907030 | le filet ornemental |
| frameShadow | #705020 | l'ombre du filet sur le champ |
Un seul rôle n'est pas attesté : error. Une feuille de personnage n'a pas d'état d'erreur à montrer. Le rouge de garance assombri qui l'occupe est choisi pour tenir le contraste sur le parchemin — et signalé comme non attesté dans le code, plutôt que glissé dans la liste comme s'il en venait.
outline, bevelLight, bevelDark nommaient un biseau : une lumière venue d'en haut à gauche, simulée par un clair et un sombre. Le parchemin n'a pas de relief à simuler. Garder ces noms en peignant un encadrement plat aurait produit exactement la sorte de mensonge que ce dépôt traque : du code juste, dont les noms décrivent autre chose. Ils deviennent frameEdge, frameOrnament, frameShadow, dans les deux portées — la structure ColorTokens est commune par construction, et c'est ce qui garantit qu'un rôle ajouté à l'une existe dans l'autre.
Un trait d'encre, une réserve de parchemin, un filet doré. C'est la réserve du milieu, et rien d'autre, qui fait lire les deux traits comme un cadre : sans elle ils se touchent, et l'ensemble devient une bordure épaisse de deux tons. Le défaut ne lèverait aucune erreur — toutes les bandes seraient toujours là, au bon endroit, de la bonne couleur — d'où un test qui relève le rôle visible à mi-hauteur, une unité à l'intérieur du trait, et exige d'y trouver du parchemin.
Les angles portent un cabochon doré posé par-dessus le trait : exactement l'inverse de l'entaille du pixel art, qui retirait de la matière aux coins.
C'est le point où il aurait été facile de se tromper. PIXEL_ART_MAX_SCALE existait parce que le filtrage au plus proche voisin ne sait pas rendre une bordure d'un pixel et demi ; la charte parchemin peint anticrénelé, cette raison-là disparaît.
Le facteur reste pourtant entier, pour une seconde raison intacte : les longueurs de la feuille de style sont des entiers de pixels. À 1,5×, le trait d'une unité et le filet d'une unité s'arrondissent tous deux à 2 px — la réserve disparaît, et l'encadrement se lit comme une bordure épaisse. Une échelle fractionnaire ne serait pas floue, elle serait fausse, et silencieuse.
La feuille de route demandait la suppression des cinq modules pixel art. Quatre le sont (PixelFocusCaret, PixelFrameGeometry, PixelFrameWidget, PixelMenuButton). Le cinquième, PixelArtScale, est renommé IdentityScale : EX-IHM-081 — le garde-fou anti-cliquet, que ce lot ne touche pas — est écrite en fonction de ce facteur, et le supprimer laisserait une exigence sans mise en œuvre. Ce qui devait disparaître de ce module a disparu : son nom, et la justification « pixel art » qui n'était plus vraie.
EX-IHM-071 (marque explicite) et EX-IHM-072 (aucun réglage inopérant) sont tenues sans changement, comme la feuille de route l'exigeait. Le curseur triangulaire en escalier devient un fleuron anticrénelé à quatre sommets — échancré à l'arrière, pour qu'il ne se lise pas comme le curseur de saisie d'un champ de texte.
Il est tracé une seule fois (hmi::paintFocusFleuron) et appelé des deux côtés — par MenuEntryButton dans sa gouttière, par FocusMarker à côté des contrôles ordinaires. Deux tracés séparés dériveraient l'un de l'autre à la première retouche : le joueur verrait une marque dans le menu et une autre dans les options, et croirait à deux états différents.
Le fleuron est aussi borné à la gouttière du bouton. À la taille d'un intertitre il débordait sur le texte, qui se serait décalé d'une entrée à l'autre selon qu'elle porte ou non la marque — un menu dont les lignes bougent quand on les parcourt.
Le LOT-01 a délibérément conservé l'atelier pixel art lors de la purge, et le LOT-11 en fait un acquis à ne pas régresser. Ce lot revient sur cette décision. Il ne la contourne pas : EX-EDIT-045 porte désormais, écrite noir sur blanc, la raison pour laquelle l'atelier reste — c'est un outil de travail, pas une esthétique — et le fait que sa suppression éventuelle est le LOT-69, pas celui-ci.
Il ne redessine pas les planches de .design-mockups/. Elles reçoivent la palette, le nommage des rôles et la composition de l'encadrement — le lint check_design_tokens.py l'exige, et une maquette qui ne décrit plus le jeu ne sert plus à décider quoi que ce soit. Mais les ornements, l'illustration peinte et la mise en page à empattements relèvent du LOT-68, qui porte les planches.
Il ne bascule pas le filtrage de la scène. EX-ARCH-022 n'impose plus le plus proche voisin, mais le rendu le pratique encore : c'est correct pour les tuiles héritées, ses seuls assets aujourd'hui. Le basculement suit l'arrivée des plans peints (LOT-76) — et c'est écrit dans l'exigence, pas laissé à deviner.
Il ne touche pas à la portée éditeur. Un outil de travail garde son apparence d'outil de travail ; aucun parchemin ne se répand dans ses tables denses. Seuls les noms des trois rôles de cadre y changent, la structure étant commune — leurs valeurs sont intactes.