Commit Graph

150 Commits

Author SHA1 Message Date
Adrestie 1de02d13a0 Ecrans d'accueil a la DA de camelot : connexion, menu, selection, dialogues et creation de personnage
- GlueXML ForeverUI (data/glue) : cadre 2:1, polices, atlas, gabarits ;
  connexion, menu, selection des personnages, dialogues, creation en deux
  etapes (races et classes ; personnalisation numerotee, listes ouvrantes,
  echantillons de couleur, apercu differe, nom en bas de l'ecran)
- choix valides calcules sur CharSections aux regles du moteur
  (tools/choix_personnalisation.py) ; couleurs des echantillons lues dans
  les textures du client (tools/couleurs_personnalisation.py), peau teintee
  par la lumiere du decor
- decors de la creation et de la selection reduits a 0,912 pour compenser
  le cadre 2:1 (tools/decors_accueil.py) ; deployer.py suit aussi
  Interface\Glues\Models
- patcheur optionnel de Wow.exe (tools/patcheur, source et executable) :
  CycleCharCustomization rend l'indice du reglage
- art des ecrans d'accueil (data/art), outils de decoupe, d'atlas et de
  donnees
- barre du bas : boutons JcJ et Aide retires, bandeau a la largeur de ses
  boutons

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 23:44:01 +02:00
Adrestie bdf41cf40f Update AMELIORATIONS.md with new feature requests
Add new features and improvements for map interactions.
2026-09-26 16:20:28 +02:00
Adrestie 070a1ca863 Update AMELIORATIONS.md with new issues
Added new issues related to quest menu and quest journal visuals.
2026-09-26 16:12:46 +02:00
Adrestie cc7d2d45fa Talents camelot, glyphes refaits, cadre du familier, superposition des fenetres
- Talents : trois arbres cote a cote facon camelot sur PlayerTalentFrame,
  noeuds carres/ronds (TalentsData.lua genere des DBC), fleches, portes,
  changements en attente (Apply / Undo), onglets lateraux des specialisations,
  Activate, talents du familier en fenetre reduite, recherche (marques sur les
  noeuds, apercu, options, absents des barres), confirmation a la fermeture,
  glisser un sort de talent appris vers une barre
- Glyphes : page refaite sur l'art fourni (tools/cuire_glyphes.py), lueurs,
  etincelles, cercles concentriques tournants ; le GlyphFrame de WotLK reste
  sous PlayerTalentFrame (le reparenter plantait le client a la deconnexion)
- Cadre du familier facon camelot (PetFrame.lua)
- Superposition.lua : feuille, grimoire et talents passent entierement l'un
  devant l'autre, grimoire et talents deplacables
- Grimoire : la recherche "Missing from action bar" suit les barres

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 18:12:34 +02:00
Adrestie 9a88e947dd Grimoire : recherche camelot ; README a jour
- Recherche du grimoire (SpellBookSearch.lua) : champ, apercu de 5
  resultats, resultats en sections (exact, apparente, nom, description),
  "Missing from action bar" ; suit Hide Passives et Show all spell ranks,
  ne groupe jamais ; resultats feuilletables en combat.
- README : minimap, carte et journal, suivi de quetes, grimoire.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 13:53:07 +02:00
Adrestie 400a3dc1da Grimoire : grille camelot sur cases securisees, combat, menus volants, reglages
- Livre de camelot dans SpellBookFrame : deux pages ou une, categories en
  onglets-icones, grille condensee, en-tete repete, portrait cuit rond.
- Menus volants : groupes de SpellFlyout.db2, completes des sorts de BC et
  WotLK, un groupe par onglet et par faction ; Seals et Judgements en plus.
- Combat : controleur securise ; onglets, pages, roulette, groupes,
  agrandir/reduire et les trois reglages passent par des blocs securises,
  les huit jeux de reglages publies hors combat.
- Banc : modele de securite de 3.3.5, OnShow/OnHide propages.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 13:19:07 +02:00
Adrestie 29dc3dfe5b Carte du monde : mode agrandi camelot, selecteur d'etages
- Mode agrandi (etape 4) : le plein ecran de WotLK habille a la camelot,
  carte seule. Cadre aux dimensions de UpdateMaximizedSize, pose en haut au
  centre dans l'unite de l'interface ; bordure sans portrait ; titre
  WORLD_MAP ; fil d'Ariane, filtres, etages, coordonnees, boutons rouges.
  La carte remplit le canevas par les constantes QUESTLIST / FULLMAP que
  WotLK lit pour la fleche et les reperes ; bordure, menus et liste des
  quetes du plein ecran de WotLK etouffes.
- Petite fenetre et mode agrandi partagent le meme ancrage.
- Selecteur d'etages : fond decoupe en trois (16 / 19), variante c60 ; nom
  elide ; la liste ne descend pas sous la largeur du selecteur.
- Banc d'essai : plein ecran de WotLK et ses deux vues, essais du mode
  agrandi et du selecteur.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 03:30:11 +02:00
Adrestie 879862c9c3 Carte et journal, suivi de quetes, largeur des menus contextuels
- Carte du monde (WorldMap.lua) : fenetre reduite camelot 702 x 534 posee
  sur l'ossature de WotLK, fil d'Ariane, filtres, etages, coordonnees,
  deplacable par la barre du titre.
- Journal de quetes (QuestLog.lua) : volet liste de camelot a droite de la
  carte (recherche, compteur, reperes, suivi, menus), L ouvre carte + volet ;
  page d'une quete (texte, objectifs, recompenses, Abandon / Share / Track)
  avec bouton Retour qui rend la carte d'avant.
- Suivi de quetes (ObjectiveTracker.lua) : modules camelot Quests et
  Achievements a la place des gestionnaires d'affichage de WotLK, API des
  gestionnaires conservee ; tri et filtres de WotLK dans le bouton filtre ;
  deplacable par /fui, position par defaut de camelot.
- Menus : les menus contextuels et sous-menus prennent la largeur de leur
  contenu, mesuree dans la police affichee.
- Art : feuilles questmaplogatlas, questtracker, cadres et fonds ; outils
  tranches_atlas.py ; banc d'essai etendu (WatchFrame, journal, menus).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 03:10:42 +02:00
Adrestie 95aaf33ab3 Add suggestion for max level player reputation bar
add note
2026-09-25 01:49:55 +02:00
Adrestie 51d074f268 Minimap : habillage camelot, horloge, calendrier, coordonnees et fleches du bord
- Minimap.lua : cadre c60, barre du nom de zone, suivi, courrier, zoom,
  cycle jour/nuit, calendrier (GameTimeFrame), horloge dans la barre
  (TimeManagerClockButton) et coordonnees sous la carte, releves dans
  blizzard_minimap, blizzard_timemanager et GameTime.xml de camelot.
- Les etats de bouton absents en 3.3.5 sont crees par chemin puis atlas
  (MiniMapTrackingButton n'a qu'une HighlightTexture).
- La carte garde sa taille de 3.3.5 a l'echelle 198 / 140 : le moteur pose
  les fleches du bord a un rayon fixe en unites de la carte. Leurs images
  sont reduites d'autant, en 64 x 64 avec mipmaps (tools/reduire_fleches.py).
  La fleche de groupe, sans methode, remplace le fichier d'origine dans
  patch-Z (exception accordee a la regle du prefixe).
- Constantes regroupees en tables : le Lua 5.1 du client refuse plus de
  60 upvalues par fonction.
- Banc : compilation Lua 5.1 de chaque fichier, et faux client qui ne donne
  a un bouton que les etats que son gabarit 3.3.5 declare.
- blp.encoder accepte des mipmaps.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 21:20:09 +02:00
Adrestie 769c7f0f9c Reputation : le nom d un sous-en-tete s ancre sur la ligne
Il l etait sur le CHEVRON -- LEFT sur sa droite, +4 -- et le temoin a
montre le meme nom pose tantot a 57, tantot a 101 du panneau, AVEC LA
MEME ANCRE ET LA MEME CIBLE : ligne a 12, chevron a 40 de bord droit 53,
donc 57 attendu. L ecart vaut 44, soit exactement RETRAIT_ENFANT moins
RETRAIT_AUTRE.

disposer pose les ancres du nom PUIS reancre la ligne dans le meme
passage. Une region ancree sur une autre region du meme cadre ne suit
pas toujours ce deplacement ; un cadre fils, lui, suit -- les noms
ancres sur ligne.barre, un Frame, n ont jamais derive.

On enleve l intermediaire : le nom s ancre sur la ligne, a CHEVRON_X
plus la largeur du chevron plus l ecart. Meme pixel, sans relais. La
largeur ne depend pas de l etat du bouton -- plus et moins font 13 de
large, seules leurs hauteurs different, mesure sur l art.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 16:48:54 +02:00
Adrestie a5676bb6cc AMELIORATIONS : les trois points demandes plus tot y reviennent
Le trousseau a revoir, le menu deroulant ameliorable et le sac qui peut
sortir par le haut de l ecran avaient ete demandes explicitement au fil
des sessions. Le tri d hier les avait emportes dans NOTES.md avec le
reste ; ils reviennent ici, ou ils auraient toujours du etre.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 16:08:21 +02:00
Adrestie 1ed47915f0 Documentation : AMELIORATIONS ne porte que ce qui a ete demande
Le reste -- ecarts, pieges, outillage, ce que 3.3.5 ne sait pas faire --
passe dans docs/NOTES.md, ou rien n a ete demande et ou tout m est
seulement utile.

AMELIORATIONS ne garde donc que les deux points demandes : l icone de
l onglet du familier, et le volet droit du PvP.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 16:06:16 +02:00
Adrestie 01456dc984 PvP : sans rang, le joueur est un civil, pas un deshonore
Le nom d un rang se lit a l indice "numero + 4". A numero = 0 cela
donnait l indice 4 -- PVP_RANK_4, "Dishonored" -- et l ecran annoncait
donc deshonore tout joueur de moins de cinquante victoires. Or les
indices 1 a 4, Pariah, Outlaw, Exiled et Dishonored, sont les rangs
NEGATIFS, ceux qu on obtient en tuant des civils.

Trois cas desormais, et non deux : un vrai rang se nomme a numero + 4,
un indice de 1 a 4 se nomme par son indice tel quel, et le reste est un
civil.

Ecart assume : "Civilian" n est pas une chaine du client. Cherchee dans
GlobalStrings -- les quarante chaines de rang vont de PVP_RANK_0 a
PVP_RANK_19 -- et dans le binaire : absente des deux. Elle est donc
ecrite en clair, et ne se traduira pas.

AMELIORATIONS gagne une section 5 : l icone qui manque a l onglet du
familier, et le volet droit du PvP, a reprendre sur
CharacterFrameSidePaneTemplate comme les autres.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 15:59:05 +02:00
Adrestie 6c50965c51 Documentation : les ecarts et les pieges de cette serie
README : les onglets lateraux ne sont plus "pas encore mis en page".
Reputation, competences, PvP, monnaies et familier ont chacun leur
section ; le sac porte son segment de monnaies suivies.

AMELIORATIONS : la jauge par quadrants et ce qu une texture qu on fait
tourner exige, le rang par les titres, les seuils recopies du serveur,
UIPanelWindows qui rend leurs ancres aux ecrans, l onglet choisi qui est
un onglet desactive, le balayage qui doit prendre les FontString, le
sous-calque absent, et les faux pris en defaut.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 13:11:16 +02:00
Adrestie 723558ade3 Bas de l'ecran : le micro-menu resiste aux vehicules
/fui micro a montre deux boutons, et eux seuls, ancres ailleurs que sur
notre bandeau : CharacterMicroButton a BOTTOMLEFT (552, 2) et
SocialsMicroButton sur le BOTTOMRIGHT de QuestLogMicroButton. C'est
exactement ce que fait VehicleMenuBar_MoveMicroButtons, appelee par
MainMenuBar_ToPlayerArt ET MainMenuBar_ToVehicleArt -- donc a chaque entree
ou sortie de vehicule. On repose apres elle, et a chaque passage general.

MainMenuBar avalait les clics a son tour : declaree enableMouse="true" et
couvrant tout le bas de l'ecran, son art remplace par le notre mais sa
souris intacte. Meme remede que pour BonusActionBarFrame.

La lecon se generalise : tout contenant du client qu'on vide garde sa
souris, et il faut la lui retirer.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 09:14:44 +02:00
Adrestie 155acf9a15 Bas de l'ecran : la barre bonus n'avale plus les clics du micro-menu
/fui micro a nomme le coupable : les dix boutons sont exactement a leur
place, un seul ancrage chacun, et GetMouseFocus rend BonusActionBarFrame.

Elle est declaree 505 x 43, strate HIGH, toplevel, avec enableMouse="true".
Effacer son art la rend invisible mais PAS inoffensive : elle reste une
dalle au-dessus du bas de l'ecran et avale les clics de tout ce qu'on y a
pose -- le bouton du personnage ne repondait plus.

C'est le meme piege que CharacterModelFrame sur les emplacements
d'equipement, et le meme remede : un cadre qui ne sert que de contenant n'a
pas a recevoir de clic. Ses douze boutons gardent le leur, etant des cadres
fils.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 09:08:00 +02:00
Adrestie 10f5fa9e02 Feuille : le rang PvP se nomme par les chaines du client
/fui pvp a tranche : UnitPVPRank rend 0 sur ce serveur et GetPVPRankInfo ne
repond rien. Le "1" du haut n'etait pas un rang mais la SAISON d'arene,
ecrite sans intitule juste au-dessus. Trois corrections.

LE DECALAGE, enfin etabli. UnitPVPRank rend un INDICE, et je n'avais aucun
usage de reference pour en deduire le numero -- WotLK ne s'en sert plus.
L'ordre des quarante chaines le tranche : PVP_RANK_1..4 sont les rangs
NEGATIFS (Pariah, Outlaw, Exiled, Dishonored), PVP_RANK_5 est Scout /
Private donc le rang 1, PVP_RANK_10 est Stone Guard / Knight donc le rang 6.
L'indice est la cle telle quelle, et le numero vaut l'indice moins quatre.
Le nom se lit donc dans ces chaines, comme GetPVPRankText le fait chez
camelot.

LA SAISON porte son intitule : ARENA, ce que le client a de plus proche
d'EXPANSION_SEASON_NAME, absent.

SANS RANG, PAS D'ANNEAU : un cercle dore vide se lit comme un defaut. Le
cadran garde sa lueur, son fond de faction et l'embleme.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 08:35:42 +02:00
Adrestie 91181e8897 Feuille : le titre du rang en haut, son numero dans l'anneau
A LA DEMANDE, et non d'apres la source : camelot ecrit les deux en haut --
PVP_RANK_NUMBER_AND_TITLE donne "Rang N : Nom" dans le CurrentRankField --
puis repete le numero dans l'anneau de recompense, par LevelLabel.

Ici le titre reste seul en haut, et le numero n'est qu'a un endroit : dans
le cercle dore.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 02:07:21 +02:00
Adrestie 0880e155a9 Feuille : l'onglet PvP, repris de camelot
PVPRankFrame.xml et pvprankframe.lua lus en entier. camelot tire tout de
C_MajorFactions -- le renom -- qui n'existe pas ici. Mais les trois
fonctions de l'epoque des rangs sont TOUJOURS dans le binaire, verifie dans
Wow.exe : UnitPVPRank, GetPVPRankInfo et GetPVPRankProgress. WotLK a
simplement cesse de s'en servir dans son FrameXML.

Heureuse coincidence : la planche c60 de camelot porte QUATORZE icones de
rang, exactement les quatorze rangs classiques. Son art est celui de
l'epoque.

Tout cet art vit sur une feuille que le listfile ne nomme pas :
ajouter_feuilles.py accepte desormais "fdid:<n>.blp => interface/...", et
retrouve ses entrees d'atlas par ce meme identifiant.

Trois ecarts assumes. La jauge circulaire n'est pas portable -- camelot la
fait avec un Cooldown dont il remplace la texture de balayage,
SetSwipeTexture, ABSENT du binaire ; l'anneau, la lueur, le fond de faction
et le badge sont poses, la progression s'ecrit en toutes lettres.
GameFontNormalMed2 n'existe pas. Le compte a rebours de saison demande un
C_SeasonInfo absent.

Le volet droit porte ce que WotLK sait vraiment donner : l'honneur.

Temoin : /fui pvp, qui dit ce que les trois fonctions rendent sur ce
serveur.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 02:04:16 +02:00
Adrestie f6f5d10903 Feuille : le balayage complet s'applique aussi a la reputation
A la demande, l'onglet valide recoit le traitement des competences : toutes
les regions ET tous les cadres fils du ReputationFrame du client sont
masques a chaque passage, sans enumeration a tenir a jour. Sa liste a
ascenseur, ses intitules de colonne et ses traits d'arborescence partent
avec.

Deux consequences : les deux traits de liste ont migre sur NOTRE panneau,
hors d'atteinte du balayage, et le balayage de construction devient inutile
-- celui de chaque passage le fait deja, des le premier.

Le cadre de detail echappe au balayage : il a change de parent et vit dans
le volet droit.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 01:57:35 +02:00
Adrestie 52c8f71480 Feuille : tout l'ecran des competences du client se tait
Il ne s'agissait pas que de ses lignes. SkillFrame declare aussi un bouton
de tri, un "tout replier", son cadre de depliage et ses trois tuiles, deux
boutons accepter / annuler, sa liste a ascenseur, et tout un cadre de detail
-- ScrollFrame, ScrollChildFrame, StatusBar. Les enumerer serait une liste a
tenir a jour et a oublier.

On masque donc TOUT ce que ce cadre porte et qui n'est pas a nous :
GetRegions ne rend que les textures, GetChildren que les cadres fils -- il
faut les deux, et a chaque passage, SkillFrame_UpdateSkills remontrant les
siennes.

Consequence : nos deux traits de liste sont crees sur NOTRE panneau et non
sur le cadre du client, sinon le balayage les emporterait.

Le faux client ne connaissait pas les cadres fils -- il rendait GetRegions
mais pas GetChildren, et l'essai ne pouvait pas s'ecrire. Chaque cadre tient
desormais la liste des siens, que SetParent met a jour.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 01:54:56 +02:00
Adrestie ff72c844a5 Feuille : l'onglet des competences, repris de camelot
SkillsFrame.xml et skillsframe.lua lus en entier. Tout est commun avec la
reputation -- liste (10, -40) / (-25, 15), deux traits, retraits 0 / 2 / 46,
marges 10, ecart 3, survol a 0 / 0,10 / 0,20 -- sauf quatre choses :

  * l'en-tete fait 26 et non 28 ;
  * le nom d'une entree est a x = 2 et non 15, faute d'AccountWideIcon ;
  * la description du volet droit est a -8 sous la jauge et non -6 ;
  * LA BARRE EST BLEUE PAR SON SPRITE -- SetFillTextureByColorType(Blue)
    suivi d'UpdateBarColor(WHITE_FONT_COLOR), donc aucune teinte. Le
    remplissage bleu est cuit au masque comme le blanc.

Le texte de la barre est TOUJOURS la progression : rang / maximum, ou
rang (+bonus) / maximum avec le bonus en vert -- TryShowBarProgressText est
appele des l'initialisation. Et a l'ouverture, la premiere competence qui
n'est pas un en-tete est choisie, comme SelectFirstSkillIfNoneSelected le
veut.

Trois ecarts assumes : 3.3.5 n'a pas de sous-en-tete -- sa hierarchie n'a
qu'un niveau -- les lignes d'armes ne sont pas detaillees, faute des chaines
WEAPON_SKILL_DETAIL_*, et la description ne defile pas.

Temoin : /fui skills.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 01:52:48 +02:00
Adrestie bf9b3aea4a Feuille : cocher "Move to Inactive" ne deselectionne plus
Le OnClick du client appelle SetFactionInactive(GetSelectedFaction()), qui
DEPLACE la faction dans le bloc des inactives : tout se renumerote, et
l'indice retenu designait alors une autre ligne.

Le detail suit donc le NOM -- comme la marque de la liste depuis le repli --
et retrouve l'indice a chaque passage, qu'il repose au client pour que ses
trois cases agissent sur la bonne faction. Si la faction quitte la liste, le
volet garde ce qu'il montrait plutot que de se vider.

Et sans faction choisie, le volet droit est VIDE : c'est l'etat de depart.
La source de verite est notre nom retenu, pas GetSelectedFaction, que le
client peut laisser pointer n'importe ou.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 01:45:29 +02:00
Adrestie 63a76b63e0 Feuille : seule la case de guerre porte les epees
Les trois cases partagent le meme fond, checkbox-minimal, mais pas la meme
coche. AtWarCheckbox porte Interface/Buttons/UI-CheckBox-SwordCheck -- deux
epees croisees, en 32 posees a (3, -5) -- tandis que MakeInactiveCheckbox et
WatchFactionCheckbox prennent checkmark-minimal, centre.

Les epees avaient ete donnees aux trois.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 01:42:05 +02:00
Adrestie 1148378293 Feuille : la description de faction est blanche et se replie
Deux corrections d'un meme geste.

LA COULEUR. camelot declare fontName = GameFontNormal sur son
ScrollingFontTemplate, mais cet objet de police est DORE en 3.3.5 -- c'est
celui des titres. Le blanc y est GameFontHighlight, et c'est ce que montre
la reference.

LE REPLI. Un texte n'a de quoi revenir a la ligne que s'il a une BOITE.
Ancree par son seul haut et ses deux cotes, la description n'avait pas de
bas : un peu longue, elle n'avait nulle part ou aller et disparaissait. Elle
a maintenant ses quatre bords -- du bas de la jauge au haut des trois
cases -- et se replie dedans.

Le faux client retient desormais SetWordWrap et SetJustifyV, pour que le
banc puisse le verifier.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 01:39:34 +02:00
Adrestie 4baec59d08 Feuille : le cadre gris du volet de reputation s'en va
ReputationDetailFrame porte un fond de fenetre declare en <Backdrop> --
UI-DialogBox-Background et UI-DialogBox-Border, avec ses marges et sa taille
de tuile. Un fond de ce type ne figure PAS dans GetRegions : le balayage des
textures ne l'atteignait pas, et son cadre gris restait a l'ecran.

SetBackdrop(nil) l'enleve, comme pour les listes de menu. A verifier sur
tout cadre du client que l'on reprend : les deux facons de poser un fond
demandent deux gestes differents.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 01:36:09 +02:00
Adrestie 22e13463c8 Feuille : le volet droit montre le detail de la faction choisie
CharacterFrameSidePaneTemplate donne la surface -- TOPLEFT (16, -14) et
BOTTOMRIGHT (-12, 14) sur l'hote droit -- puis le titre large de 195 et
centre, le sous-titre, un UI-Character-Info-ScrollLine et la description.
ReputationDetailFrame y ajoute une StandingBar de 180 x 29 et trois cases de
26 empilees depuis le pied : la premiere a x = -4, les suivantes a (0, -2),
fond checkbox-minimal, coche UI-CheckBox-SwordCheck en 32 posee a (3, -5),
intitule large de 158 a +2, celui d'At War en rouge.

C'est le CLIENT qui remplit : ReputationFrame_Update ecrit le nom, la
description et l'etat des trois cases pour la faction que
SetSelectedFaction designe, et seulement si son cadre de detail est visible.
Cliquer une ligne le lui dit donc, puis relit ce qu'il a pose. Les trois
cases restent les siennes -- elles portent la declaration de guerre, le
rangement parmi les inactives et le suivi sur la barre du bas.

Deux ecarts assumes : GameFontNormalMed3 n'existe pas en 3.3.5, et la
description de camelot defile la ou la notre est simplement bornee.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 01:32:32 +02:00
Adrestie 9403d3cdc4 Feuille : la liste de reputation s'arrete au compte du client
Releve par /fui reput : le client annonce NEUF factions et repond encore a
la DIXIEME -- l'en-tete "Inactive", hors du compte. Sa propre boucle le sait
et teste factionIndex <= numFactions ; la notre lisait tant que
GetFactionInfo repondait, et posait une ligne de plus.

C'est ce qui rendait le repli incomprehensible : la liste raccourcit, mais
nous continuions a lire au-dela du compte, la ou le client rend des entrees
d'un autre bloc. Un sous-en-tete paraissait alors hors de sa categorie, et
vide.

Le faux client reproduit desormais ce piege -- il repond a l'indice qui suit
son propre compte -- sinon l'essai ne prouverait rien.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 01:22:16 +02:00
Adrestie 92fdb3976c Feuille : replier une section se comporte enfin correctement
Replier RACCOURCIT la liste, il ne masque pas : CollapseFactionHeader retire
les enfants de la numerotation du client, GetNumFactions diminue et tout ce
qui suit remonte d'un cran. C'est ainsi que 3.3.5 et camelot fonctionnent
tous les deux.

Ce qui n'allait pas venait d'ailleurs, et de deux endroits.

Le defilement etait borne APRES la pose : replier en bas de liste laissait
un passage entier pose depuis un decalage devenu trop grand -- des lignes
vides, ou les mauvaises factions, jusqu'au passage suivant. On borne
maintenant, et on repose si cela a bouge.

La selection se retenait par un INDICE, qui ne survit pas a un repli : les
factions se renumerotent et la marque changeait de ligne. Elle se retient
par le nom, seule cle stable, GetFactionInfo ne rendant pas de factionID en
3.3.5.

Le faux client se contentait d'un drapeau : il renumerote desormais comme le
vrai, et le banc verifie les deux sens ainsi que la marque apres un
aller-retour.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 00:30:35 +02:00
Adrestie 55e9e53699 Feuille : la hierarchie de l'onglet de reputation
SetElementFactory choisit selon deux drapeaux : ni en-tete ->
ReputationEntryTemplate, 30 ; en-tete et pas un enfant ->
ReputationHeaderTemplate, 28 ; en-tete ET enfant ->
ReputationSubHeaderTemplate, 22. SetElementIndentCalculator donne le
retrait : 0 pour un en-tete de premier niveau, 46 pour un enfant qui n'est
pas un en-tete, 2 pour tout le reste. SetPadding ajoute 10 de marge sur les
quatre bords et 3 entre deux lignes.

3.3.5 rend les trois drapeaux qu'il faut : isHeader en neuvieme position,
hasRep en onzieme, isChild en treizieme. Les hauteurs variant, la liste ne
se divise plus : elle s'empile jusqu'a la marge du bas.

Deux corrections venues de la meme lecture : le nom d'une entree est a 15 et
non 25 -- Initialize le decale de -10 quand l'AccountWideIcon est masquee,
ce qu'elle est toujours ici -- et un sous-en-tete ancre son nom a +4 de son
bouton, pose a x = 28, en ne montrant sa barre que s'il porte de la
reputation.

ENFIN : le client remontre ses propres lignes a chaque passage --
ReputationFrame_Update finit par factionRow:Show() sur chacune des quinze.
Les masquer a la construction ne suffisait pas, elles revenaient avec tout
leur art d'epoque. C'est pourquoi certaines reputations echappaient au
theme.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 00:27:32 +02:00
Adrestie d18e27712e Feuille : une texture cuite doit faire une puissance de deux
Le remplissage cuit sortait en 320 x 30 : en jeu, la barre devenait un bloc
uni que la teinte de la faction coloriait -- d'ou des jauges entierement
vertes. Tout l'art d'interface du client d'origine est en puissance de deux
-- verifie : 256 x 256, 256 x 64, 16 x 16 -- et il ne sait visiblement pas
echantillonner autre chose.

La cuisson sort desormais en 512 x 32, largement le double de la taille
affichee (160 x 15), et la lecture reste en 0..1. cuire_masque.py REFUSE
maintenant d'ecrire une autre taille : le defaut est muet a l'ecriture et ne
se voit qu'en jeu.

Le temoin /fui reput a servi a ecarter : fractions proportionnelles, teinte
conforme a FACTION_BAR_COLORS, en-tetes sans barre. La logique etait juste.
Le fond neuf-tranches a ete rendu hors du jeu pour l'ecarter a son tour.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 00:21:15 +02:00
Adrestie ff85b3df1b Feuille : le remplissage des jauges suit enfin le contour
camelot le decoupe par common-stat-bar-Mask, une MaskTexture ancree LEFT et
RIGHT sur la barre -- donc tendue sur toute sa largeur -- a sa hauteur
d'atlas, 29. Sans elle, le remplissage avait des bouts carres qui ne
suivaient pas le contour du fond.

tools/cuire_masque.py multiplie donc l'alpha du masque dans le sien, une
fois pour toutes. Et il le DECOUPE comme notre fond : celui de camelot
s'etire avec la barre, le notre garde ses bouts a 10 px et n'etire que le
milieu -- un masque tendu ne coinciderait plus avec lui.

Le resultat est un fichier a lui seul, calcule pour une barre de 160, qu'on
rogne a la fraction voulue comme le fait SetFillPercent.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 00:13:12 +02:00
Adrestie 0307513515 Feuille : le fond des jauges de reputation se decoupe en neuf
common-stat-bar-bg mesure 68 x 30 et la barre en fait 160 : etire, ses bouts
arrondis s'allongeaient. La mesure se prend sur l'art -- la premiere colonne
dont le profil vertical rejoint celui du milieu, c'est-a-dire ou le bord est
fini : elle tombe a 10. La hauteur ne changeant pas, seules les tranches
horizontales du milieu s'etirent.

Le remplissage, lui, reste une seule texture : c'est une jauge, que
SetFillPercent rogne a la fraction voulue, et la decouper en ferait un
cadre. La compression horizontale de sa feuille -- 240 pour une barre de
160 -- est celle de la source.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 00:09:22 +02:00
Adrestie 56eed4c390 Feuille : la plaque d'en-tete de reputation se decoupe en neuf
ReputationHeaderTemplate la pose sans ancrage, donc etiree sur toute la
ligne : a 64 x 29 pour une ligne de plus de trois cents, ses coins arrondis
s'etalaient en ellipses.

Mesure prise sur l'art -- l'alpha de la colonne de gauche -- l'arrondi court
sur une dizaine de pixels. Un coin de 12 le couvre et reste sous la moitie
de la hauteur, au-dela de quoi les tranches se chevaucheraient. La plaque
passe donc par CreateNineSlice, et le banc compte ses neuf tranches.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 23:32:01 +02:00
Adrestie 8224528cb3 Feuille : les lignes de reputation sont baties d'apres camelot
Trois tentatives pour reposer et rhabiller les quinze ReputationBar<i> de
3.3.5, trois echecs de la meme nature : ReputationFrame_Update ne remplit
pas, il REPOSE son art a chaque passage -- SetNormalTexture sur les boutons,
les AtWarHighlight additifs, les traits d'arborescence, la texture de la
StatusBar -- et le clic en declenche un. Chaque correction tenait jusqu'au
passage suivant.

Les lignes sont donc les NOTRES, baties d'apres les gabarits lus en entier
et remplies depuis GetFactionInfo, la seule chose que 3.3.5 apporte ici :

  en-tete 28  plaque common-button-list-collapseExpand etiree, nom en or a
              LEFT x = 10, fleche plus/moins a RIGHT (-8, -1)
  entree  30  barre 160 x 29 a RIGHT x = -3 -- fond common-stat-bar-bg,
              remplissage common-stat-bar-white haut de 15 teinte par
              FACTION_BAR_COLORS, texte centre -- et nom en blanc de x = 25,
              le bord droit de l'AccountWideIcon, au LEFT de la barre moins 10
  survol      trois tranches, cotes de 6, aux alphas de
              RefreshBackgroundHighlightOpacity : 0 / 0,10 / 0,20, et
              0,50 / 0,65 / 0,85 en guerre

A l'attitude maximale la barre est pleine et sans texte de progression,
comme InitializeBarForStandardReputation le veut ; au survol elle montre la
progression au lieu de l'attitude.

Lecon : quand un ecran du client se repose lui-meme, on ne le rhabille pas,
on le remplace.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 23:29:19 +02:00
Adrestie da7ac025dd Feuille : la ligne de reputation suit enfin le gabarit en entier
Trois erreurs, une seule cause : lire un bout du XML de camelot et le plaquer
sur les cadres de 3.3.5, au lieu de lire le gabarit en entier avant d'ecrire.

ReputationEntryTemplate donne tout : barre ancree RIGHT x = -3, nom en
GameFontHighlight de hauteur 15 allant de x = 25 -- le RIGHT de
l'AccountWideIcon, large de 23 et posee a LEFT x = 2 -- jusqu'au LEFT de la
barre moins 10, et intitule d'attitude centre sur la barre par un LEFT plus
un RIGHT. Tout cela est desormais pose tel quel.

Et l'art du client revient a CHAQUE mise a jour : ReputationFrame_Update
rappelle SetNormalTexture sur les boutons et remontre la texture de la
StatusBar, les deux AtWarHighlight additifs et les traits d'arborescence.
L'etouffer une fois a la construction ne suffisait pas -- l'image reprenait
sa taille declaree, 16 x 16 ancree a LEFT +3 pour une ligne de 20, et se
superposait a la notre. C'est ce qui deformait les plus et les moins et
faisait sortir les barres de leur cadre. On repasse apres lui a chaque fois.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 23:18:28 +02:00
Adrestie f130d6221a Feuille : le trait de liste ne couvre plus tout le volet
Le troisieme argument de SetAtlas veut dire "ne touche pas a la taille" : il
ne vaut que si on la pose soi-meme juste apres -- un SetAllPoints, un
SetWidth, un second ancrage. Pose sur une texture sans dimension ni second
point, il la laisse s'etaler sur tout son parent.

Les deux traits de liste de la reputation etaient dans ce cas : une immense
bande doree par-dessus l'ecran. La fleche plus/moins aussi, en plus discret.
Les deux reprennent leur taille d'atlas -- 384 x 8 et 13 de large -- et le
banc les verifie.

Les appels du reste de l'addon sont tous suivis d'un dimensionnement :
c'etait bien l'usage, mal repris.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 23:13:51 +02:00
Adrestie 46d0dcd6ae Feuille : corriger l'en-tete de reputation, mal lu
common-button-list-collapseExpand n'est PAS une fleche : c'est le fond d'une
ligne d'en-tete, une plaque arrondie de 64 x 28 que ReputationHeaderTemplate
pose sans ancrage, donc etiree sur toute la ligne. Posee a sa taille d'atlas
sur un bouton de 20, elle se repetait sur chaque ligne et recouvrait les
noms.

La vraie fleche est le StateIcon du meme gabarit, que ReputationHeaderMixin
remplit avec common-button-list-plus ou -minus, ancre RIGHT en (-8, -1) --
a droite de la ligne, et pas a gauche.

Un en-tete porte donc sa plaque, son nom a LEFT x = 10 et sa fleche, mais
aucune barre : celle-ci appartient aux entrees. GetFactionInfo rend isHeader
en neuvieme position, et c'est lui qui decide.

Lecon notee : un nom d'atlas ne dit pas ce que l'art contient. Le recadrage
d'un sprite depuis sa feuille prend dix lignes et evite cette erreur.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 23:09:57 +02:00
Adrestie 6517687593 Feuille : l'onglet de reputation, repris du code de camelot
ReputationFrame.xml donne la liste -- TOPLEFT (10, -40) et BOTTOMRIGHT
(-25, 15) sur le volet gauche, deux traits UI-Character-Info-ScrollLine-Long
centres sur son haut et son bas -- et les gabarits : entree de 30, barre de
160 x 29 heritee de ColoredProgressBarTemplate, fond common-stat-bar-bg,
remplissage common-stat-bar-white teinte et haut de 15.

3.3.5 a les memes pieces sous d'autres noms : quinze ReputationBar<i>
ancrees une fois dans le XML, que ReputationFrame_Update ne fait que
remplir. On les repose une fois pour toutes et on se greffe apres lui pour
teindre, FACTION_BAR_COLORS donnant la couleur de chaque attitude.

Trois ecarts assumes, ecrits dans le fichier : pas de MaskTexture, donc les
bouts du remplissage restent carres ; un seul pas de ligne, la pagination du
client en exigeant un ; le nombre de lignes recalcule pour le volet, la
constante du client etant calee sur l'ancienne fenetre.

Un contenu peut se batir avant que la fenetre soit posee : la hauteur du
volet est prise par construction, la mesure ne servant que credible.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 23:06:03 +02:00
Adrestie bfa07df1a3 Feuille : l'onglet du personnage porte l'icone de sa classe
A LA DEMANDE, et non d'apres la source : camelot y met le portrait du
joueur -- CHARACTER_MODE_TAB_ICONS laisse la premiere entree a nil et
UpdateCharacterModeTabPortrait appelle SetPortraitTexture.

Une icone de classe demande un fichier par classe : les dix de 3.3.5 sont
versees depuis Interface/ICONS/ClassIcon_<classe> et cuites au masque comme
les autres, meme echelle et meme contour. Le jeton vient du second retour de
UnitClass et nomme le fichier ; la casse est sans importance, une archive
adresse ses fichiers par un condense insensible a la casse.

Le bouton Character Info du volet droit garde le portrait : il n'etait pas
concerne.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 22:23:24 +02:00
Adrestie f8f335a04f Feuille : les onglets lateraux passent sous l'encadrement
Un onglet est plus large que ce qu'on en voit : son art porte une langue a
gauche, qui vient se glisser sous la fenetre. Le fond de l'onglet y est
sombre et passait inapercu, mais le survol et le marqueur d'actif sont des
CONTOURS qui tracent toute la forme, langue comprise -- ils s'affichaient
donc par-dessus le metal du volet droit.

Aucun niveau n'etait fixe sur ces cadres : rien ne garantissait l'ordre. La
barre prend le niveau du cadre et les onglets un cran au-dessus, assez pour
couvrir le fond du panneau et pas assez pour atteindre l'habillage, qui vit
a NIVEAU_ART. Le banc verifie l'encadrement des trois niveaux.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 22:11:33 +02:00
Adrestie 06d1d424b0 Feuille : la colonne d'onglets se decale de 1, et les icones du volet
reprennent leur taille

DEUX CONSTANTES PORTAIENT LE MEME NOM. ONGLET_ICONE valait 28 pour les deux
onglets du volet droit -- Character Info et Equipment Manager. En portant
l'icone des onglets LATERAUX a 50, une seconde declaration du meme nom a ete
posee plus bas : en Lua elle masque la premiere pour tout ce qui suit, et
creerOngletVolet vient apres. Les deux boutons du volet s'etaient donc
agrandis sans qu'on l'ait demande.

Les noms sont maintenant distincts -- ONGLET_VOLET_ICONE et
ONGLET_LATERAL_ICONE -- et le banc verifie les deux tailles separement.

La colonne d'onglets se decale d'un pixel vers la droite, a la demande.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 21:59:47 +02:00
Adrestie 16a2204368 Feuille : le contour des icones d'onglet cesse d'etre un escalier
Le masque est BINAIRE -- releve sur l'art, sa ligne du milieu passe de 0 a
255 d'un texel a l'autre. Le client l'applique a la resolution de l'ecran,
ou cette marche est fine ; cuite a 64 px elle devenait un escalier que
l'agrandissement de l'interface etalait sur deux ou trois pixels reels.

Le masque est donc INTERPOLE au lieu d'etre lu au texel le plus proche, et
pris dans sa version 2x. La cuisson sort a 128 x 128, pour que le contour
ait de quoi s'adoucir.

Premiere tentative ecartee : seize echantillons par texel tombaient tous
dans le MEME texel du masque -- a cette echelle, la fenetre est plus fine
qu'un texel de masque. C'est le masque qui porte la marche.

Le contenu de l'icone ne peut pas s'ameliorer : 64 x 64 est tout ce que le
client possede -- les quatorze fichiers voisins sont tous de cette taille --
et camelot affiche exactement les memes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 21:57:38 +02:00
Adrestie 1957e7df20 Feuille : le masque des onglets est cuit dans l'alpha des icones
camelot decoupe l'icone d'un onglet par une MaskTexture -- common-sidetab-
mask -- et 3.3.5 n'en a pas : les angles restaient carres. Ce que le client
ne sait pas faire a l'ecran, tools/cuire_masque.py le fait avant.

La geometrie vient de la source et non d'une estimation : onglet 55 x 55,
masque 55 x 60 ancre au centre, icone 50 x 50 en (-3, 0) rognee a 0,03125 ;
hors du masque, CLAMPTOBLACKADDITIVE donne zero.

Deux dossiers : icons/ garde l'export brut -- provenance et entree de la
cuisson -- TabIcons/ porte les versions cuites, et c'est celles-la qu'on
affiche. Relancer l'outil refait les secondes a partir des premieres, sans
wow.export.

L'outil ecrit aussi l'apercu PNG que l'atelier exige a cote de chaque .blp :
ceux qui viennent du client sortent de wow.export, une image que NOUS
fabriquons n'a personne pour la produire.

Le portrait du personnage garde ses angles vifs : son icone n'est pas un
fichier, SetPortraitTexture la repose a chaque changement d'apparence.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 21:52:24 +02:00
Adrestie 7c65d31931 Feuille : l'onglet actif se voit, et l'icone remplit son onglet
LargeSideTabButtonTemplate empile quatre choses : common-sidetab en fond,
l'icone, common-sidetab-SELECTED en OVERLAY pour l'onglet actif, et
common-sidetab-hover en HIGHLIGHT pour le survol seul. Le marqueur d'actif
n'etait pas pose -- son atlas etait declare et jamais utilise, et rien a
l'ecran ne disait quel onglet etait ouvert. Une seule chose le decide : le
groupe ouvert, donc rien a retenir et aucun clic a intercepter.

L'icone passe de 32 a 50 : fillToInterior est vrai pour ces onglets, et
UpdateIconInterior pose SetSize(interiorExtent, interiorExtent) -- 50 par
defaut -- avec SetTexCoord(0.03125, 0.96875). L'onglet faisant 55 de large,
l'icone prend tout l'interieur moins le bord. Un tiers de la surface etait
perdu.

Reste un ecart assume : la source masque l'icone par common-sidetab-mask,
une MaskTexture que 3.3.5 n'a pas. Ses angles restent carres.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 21:46:47 +02:00
Adrestie 2d5dc1c45f Feuille : les onglets PvP et statistiques, que 3.3.5 n'avait pas
CHARACTERFRAME_SUBFRAMES en compte cinq, camelot six. Les deux manquants
sont crees avec leurs icones -- celle du PvP suit la faction, comme
SetupModeTabs le fait pour son quatrieme onglet. L'ordre de la colonne suit
camelot : PvP entre competences et monnaie, statistiques en dernier ; le
familier garde la deuxieme place que 3.3.5 lui donne.

LE PvP CESSE D'ETRE UNE FENETRE. PVPParentFrame -- 384 x 512, toplevel, fils
d'UIParent -- est reparente dans le volet gauche et son toplevel retire,
sans quoi il resterait au-dessus de tout. Reparenter est sans danger ici :
ce cadre ne porte aucun de nos reglages de niveau. TogglePVPFrame, donc la
touche et le bouton du micro-menu, ouvre desormais la feuille sur cet
onglet. Sa mise en page reste a faire.

L'onglet des statistiques est vide, et c'est voulu : 3.3.5 met les siennes
dans AchievementFrameStats, une fenetre a part, et ce qu'il faut y mettre
n'est pas decide.

Un ecran qui n'est pas au client ne passe pas par CharacterFrame_ShowSubFrame
-- elle ne connait que ses cinq cadres et laisserait la feuille sans groupe.
Les deux gestes se font separement.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 21:42:13 +02:00
Adrestie 2babda80f6 Feuille : reputation et monnaie portent enfin leurs icones
Le listfile communautaire ne nomme pas les INV_SideTab_*_c60 : elles
n'existent que par leur FileDataID. ajouter_feuilles.py accepte donc une
ligne "source => nom voulu" -- on exporte par l'identifiant et on range sous
le nom que camelot donne, pour que l'atelier reste lisible et que
l'identifiant demeure note.

Reputation 8197103, monnaie 8197078 : verifiees a l'apercu -- une poignee de
main, une pile de pieces -- puis posees sur les onglets 3 et 5. Avec celle
des competences, les trois onglets que camelot decrit portent leur icone.

Les deux icones PvP ne sont pas versees : la feuille de 3.3.5 n'a pas cet
onglet. Leurs identifiants sont notes pour le jour ou elle en aura un.

L'onglet du familier garde son texte : camelot n'en a pas, donc aucune
source.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 21:33:18 +02:00
Adrestie ab84ac8470 Feuille : les onglets lateraux portent les icones de camelot
CHARACTER_MODE_TAB_ICONS nomme trois icones. Celle des competences --
Ability_Racial_JackofAllTrades -- est versee et remplace le mot.

Les deux autres, INV_SideTab_Reputation2_c60 et INV_SideTab_Currency_c60,
sont introuvables : le client charge dans wow.export EST celui de camelot,
wow_classic_beta 1.60.1.69913, et son code les nomme, mais le listfile
communautaire ne leur donne aucun nom -- /resolve rend null, /search n'en
connait aucune. Reputation et monnaie gardent donc le texte du client
plutot qu'une icone inventee. L'onglet du familier, lui, n'existe pas chez
camelot : aucune source, donc pas d'icone non plus.

UpdateTabLayout corrige au passage l'ecart entre deux onglets : (0, -2) et
non (0, 0). Le chevauchement de 2 px etait perdu. La meme fonction confirme
la regle du precedent VISIBLE, posee la veille.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 21:22:21 +02:00
Adrestie 8d4b66e3db Feuille : les onglets lateraux ne laissent plus de trou
3.3.5 efface l'onglet du familier quand le personnage n'en a pas --
PetPaperDollFrame_UpdateIsAvailable fait CharacterFrameTab2:Hide(), puis
rattache le suivant sur le LEFT du masque, sa reparation a lui, pensee pour
une rangee horizontale.

En colonne, l'onglet masque restait ancre et reservait sa hauteur :
reputation, competences et monnaie flottaient sous le personnage au lieu de
le suivre. La pile ne chaine plus que sur le precedent VISIBLE, et se refait
a chaque appel de cette fonction -- la seule qui decide de cet etat.

Le faux client sait desormais masquer cet onglet comme le vrai, avec son
rattachement horizontal, et le banc verifie les deux sens.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 21:17:33 +02:00