Commit Graph

36 Commits

Author SHA1 Message Date
Adrestie d80f4deda2 Liste des royaumes a la DA de camelot : 3.3.5 rhabillee
- ForeverUIGlueRealmList.lua : la liste du client garde ses places, ses
  tailles et sa logique ; en-tete DialogHeader, onglets uiframe-tab /
  uiframe-activetab, croix 128-RedButton-Exit, Annuler / OK 128-RedButton,
  barre de defilement minimale, polices de camelot (GlueFont*, Realm*)
- l'art herite que la liste moderne garde (HelpFrame, WhoFrame-ColumnTabs,
  UI-SortArrow, UI-QuestLogTitleHighlight) reste : identique chez camelot
- croix de fermeture decoupee de 128redbuttonc60 (et sa lueur de
  128redbutton) ; table d'atlas des ecrans d'accueil completee

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 23:53:31 +02:00
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 d110de1cbe Chat et barres d'auras a la DA de camelot ; plus aucune globale du client ecrite par l'addon
- Chat : cadre, barre et bouton de retour, colonne, bouton d'amis de camelot ;
  au repos fond, onglets, colonne et saisie s'effacent, allumage au survol
- Barres d'ameliorations et d'affaiblissements (Buffs.lua) : grille, bordures
  par type, clignotement, repli, regroupement, enchantements d'arme
- Souillure : StaticPopupDialogs n'est plus reaffectee (BindEnchant bloque) ;
  menus deroulants, suivi des objectifs, choix d'icone, ajout de canal et
  carte du monde n'ecrivent plus les globales du client ; menus d'unite :
  lignes protegees servies par des boutons securises hors combat, grisees en
  combat ; seule MAP_QUEST_DIFFICULTY reste, par decision
- Gestionnaire d'ensembles : plus d'appel GetEquipmentSetIconInfo(nil)
- Banc : garde des globales ecrites (bytecode Lua 5.1), faux client durci

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-26 18:36:19 +02:00
Adrestie 81b2ce58a3 Navigateur de raid dans le chercheur : onglet lateral, onglets du bas List My Group et Join, categories de la feuille de personnage, cases et menu de camelot ; README a jour
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-26 16:08:44 +02:00
Adrestie 725516f262 Chercheur de donjon a la DA du chercheur de groupe camelot : fenetre deplacable, roles, categories, details et recompenses, liste des donjons ; decoupe des feuilles de 2048
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-26 15:01:01 +02:00
Adrestie 4628f3b4fb Social camelot (contacts, qui, guilde, raid, canaux), onglet PvP, cadres de groupe et de raid, bouton Social en tabard, fenetre de tabard camelot
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-26 14:00:12 +02:00
Adrestie 1c3f855557 Carte du monde : portails d'instance, bouton World, listes vers le bas ; feuille : onglet Pet, modeles a la souris
- Carte du monde : un clic sur le portail d'un donjon ou d'un raid (icones de
  WDM, livre dans patch-enus-n.mpq) ouvre sa carte par SetMapByID
  (WorldMapInstances.lua, genere des DBC du client par
  tools/cartes_instances.py)
- "World" mene a la vue cosmique (Azeroth / Outreterre), reste actif en donjon
- premiere ouverture en plein ecran habillee camelot d'emblee
- les listes des menus de la carte s'ouvrent vers le bas, calees dans l'ecran
- Feuille de personnage : icone de l'onglet Pet selon la classe ; le
  personnage et le familier tournent a la souris (reglages de camelot)
- /fui souris : le cadre sous la souris a chaque clic (diagnostic)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 20:01:43 +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 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 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 ef7b99c75b Sacs : le segment des monnaies suivies, sous la bourse
A la demande, donc une modification accordee d un ecran valide.
UpdateCurrencyFrames de camelot : le segment prend le bas de la fenetre
et c est la BOURSE QUI MONTE, son bas sur le haut du segment.
CalculateExtraHeight ajoute alors sa hauteur, et la fenetre grandit.

L encadre est ContainerFrameCurrencyBorderTemplate, deux bouts et un
milieu tendu, la planche commoncurrencybox entrant dans patch-Z. Les
jetons s enchainent vers la gauche, jusqu a MAX_WATCHED_TOKENS.

ManageBackpackTokenFrame reparente son propre segment dans le sac ET
lui pose BACKPACK_HEIGHT + 22, ce qui defaisait la hauteur calculee : on
masque le sien et on repasse derriere elle. Cocher "Show on Backpack"
passe par SetCurrencyBackpack et par rien d autre.

Les chiffres du segment sont d un cran au-dessus de ceux de camelot, a
la demande ; celui de la bourse ne bouge pas.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 13:11:03 +02:00
Adrestie 8599265c5d Feuille : un troisieme onglet au volet droit, les titres
A la demande : camelot n a pas cet onglet -- son PAPERDOLL_SIDEBARS vaut
{STATS, EQUIPMENTMANAGER, PET} -- et l icone vient de mainline. La
disposition a trois, elle, vient de camelot : c est le DEUXIEME onglet
qui porte l ancre, le troisieme colle a sa droite et le premier a sa
gauche.

La liste prend toute la largeur du volet moins la marge des
statistiques, et le meme fond alterne qu elles. Le menu deroulant de
titre du client se tait a chaque passage : PlayerTitleFrame_UpdateTitles
le remontre des qu un titre change.

Le nom de la feuille suit le titre a UNIT_NAME_UPDATE, et non au clic :
SetCurrentTitle part au serveur, et UnitPVPName ne rend le nouveau nom
qu a la reponse.

Le TitleManagerPane de camelot est reste sur une ancre morte, sous la
bande de pierre : on prend celle de l EquipmentManagerPane.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 13:10:24 +02:00
Adrestie ad401ddcb8 PvP : la jauge circulaire, refaite par quadrants
SetSwipeTexture est absent de 3.3.5 et la texture de balayage du Cooldown
est cablee dans le moteur : la remplacer changerait tous les temps de
recharge du jeu. Le cadran est donc coupe en quatre quarts ; un quart
depasse montre le quart de l anneau, le quart ou la jauge s arrete montre
un DEMI anneau tourne par SetTexCoord a huit arguments.

La cuisson recale le centre du cercle sur le centre du canevas -- une
texture qu on fait tourner decrirait sinon une boucle -- et interpole la
couleur ponderee par l alpha, sans quoi le blanc des texels vides bordait
l anneau d un lisere clair.

Verifie par la geometrie et non par l oeil : le harnais relit les
coordonnees posees et interroge l image sur 72 angles, pour sept
fractions.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 13:10:06 +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 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 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 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 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 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 354ffa7284 Choix d'icone : place, fond, encadrement et barre de camelot
La fenetre s'ancre en TOPLEFT sur le TOPRIGHT de la feuille de
personnage, comme camelot ancre la sienne sur ce qu'elle accompagne.

Fond noir a 80 % de (7, -7) a (-7, 7), et SelectionFrameTemplate en neuf
pieces : les atlas macropopup-*, dont le coin bas droit de 174 x 39 qui
porte le socle des boutons.

MinimalScrollBar portee : 8 de large, glissiere et curseur en trois
morceaux, fleches de 17 x 11. Seules les textures changent, le
FauxScrollFrame du client garde son comportement.

Quatre feuilles versees.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 16:07:52 +02:00
Adrestie b7213e7ff4 Listes des menus deroulants a la DA de camelot
Un seul cadre pour tout le jeu : DropDownList1 et 2. camelot fait pareil
-- GetDefaultMenuMixin et GetDefaultContextMenuMixin rendent le meme
MenuStyle1Mixin -- donc l'habillage vaut pour tous les menus.

Saveur tranchee par l'art : les atlas common-dropdown-classic-* que cite
classic/ n'existent nulle part dans ce client, tandis que les
common-dropdown-* de mainline/ ont tous leur variante c60.

Fond common-dropdown-bg-c60 a (-10, 3) / (10, -3), alpha 0,925, a la
place des deux Backdrop d'epoque -- retires par SetBackdrop(nil), car
ToggleDropDownMenu relevera un cadre masque. Lignes de 20, police
GameFontHighlightLeft, case common-dropdown-ticksquare avec la coche
jaune par-dessus. Surbrillance et fleche de sous-menu etaient deja
identiques.

Deux feuilles versees : commondropdownc60 et commondropdown (la case et
la coche n'ont pas de variante c60).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 08:56:19 +02:00
Adrestie 4508166067 mod-forever-ui: feuille du personnage reprise a zero, avec la capture
La capture de reference entre dans le depot :
docs/reference/camelot_feuille_personnage.png, 923 x 663, echelle 4/3 --
le cadre y mesure 837 x 647 pour 631 x 484 logiques, ce qui confirme les
constantes de la source.

Le module est reecrit. Ce qu'il pose desormais, tout releve de camelot/ :

  cadre 631 x 484, art de panneau dans un cadre fils au-dessus des volets,
    coin haut gauche UI-Frame-PortraitMetal-CornerTopLeft
  portrait 44 centre sur le trou mesure de l'anneau (25 ; -22,5)
  volet gauche 398 avec -General-BG, volet droit 233 avec -Stat-BG etire et
    -Stat-StoneBG en haut, separateur en trois tranches
  emplacements 40, colonnes (24,-60) et (-20,-60), armes au BOTTOM (-60,30),
    distance et munitions en 27
  modele sur tout le volet gauche
  ONGLETS LATERAUX : les onglets du bas de 3.3.5 passent en colonne A
    DROITE, dehors -- barre de 64 x 384 au TOPRIGHT du cadre, 30 sous son
    haut, onglets de 55 x 55 (l'art common-sidetab fait 55 x 60 dont 5 de
    transparent). L'onglet du personnage porte son portrait, rogne a
    0,03125, comme UpdateCharacterModeTabPortrait.

Art ajoute a l'atelier : interface/common/commonsidetabc60 (l'onglet, son
survol, son etat choisi).

ECART SIGNALE : les icones INV_SideTab_*_c60 que la source donne aux
onglets de reputation, devises et statistiques N'EXISTENT PAS dans l'export
du client -- seul l'art commun des onglets y est. Ces onglets gardent donc
le texte du client en attendant.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 03:03:23 +02:00
Adrestie 053624b061 mod-forever-ui: l'autolancement du familier reste celui du client
J'ai enfreint la regle de lecture des sources : AutoCastTemplates n'existe
que dans mainline/, et seuls camelot/ et shared/ font foi. L'anneau que
j'en avais tire -- coins fixes et fourmis tournantes -- est retire, avec
ses deux petites feuilles, sa table d'atlas et l'outil qui les produisait.
camelot garde ici le comportement de 3.3.5 : sa bordure scintillante et ses
quatre etincelles.

La regle est desormais ecrite en tete d'AMELIORATIONS : un fichier qui
n'existe que dans mainline/ n'est pas une source, c'est un point a trancher.

L'echelle, pas la taille : redimensionner le cadre des etincelles ne suffit
pas, le client les pose a une taille fixe et AutoCastShine_OnUpdate les
deplace sans les retailler -- d'ou des etincelles trop grosses sur un cercle
trop petit. SetScale(30/36) sur le cadre fait suivre tailles et orbite. La
bordure, elle, passe de 58 a 48,3.

Le piege de SetRotation reste note : il efface le rectangle d'atlas. Plus
aucun element ne tourne aujourd'hui, mais la note servira.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 01:43:49 +02:00
Adrestie 10512fed73 mod-forever-ui: l'anneau tourne par SetTexCoord, pas par SetRotation
Ma premiere explication etait fausse : ce n'etaient pas les 2048 px de la
feuille. SetRotation existe bien dans ce client, mais il RECALCULE les
coordonnees de texture sur l'image entiere et efface le rectangle d'atlas :
la texture se met a montrer toute la feuille, d'ou les deux sprites l'un a
cote de l'autre.

La rotation passe donc par la forme a HUIT arguments de SetTexCoord, que le
client annonce lui-meme dans son message d'usage : "SetTexCoord(ULx, ULy,
LLx, LLy, URx, URy, LRx, LRy)". Elle nomme les quatre coins et reste dans le
rectangle de l'element.

Ses coins balaient le carre CIRCONSCRIT, 1,41 fois le cote : un element
tournant doit etre seul et centre dans sa feuille, avec de la marge, sinon
la rotation va chercher les pixels du voisin. petite_feuille.py sait
desormais poser un element au milieu avec sa marge, et refuse une feuille
trop petite pour le carre circonscrit. Les fourmis ont leur feuille de 128
(marge de 25), les coins la leur en 64.

Le harnais garde les huit coordonnees et verifie qu'elles sont employees,
qu'aucune ne sort de la feuille, et que SetRotation n'est pas appele.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 01:37:08 +02:00
Adrestie ef4fe6ce2a mod-forever-ui: l'anneau d'autolancement vient d'une petite feuille
Il sortait en bruit. Le fichier n'y est pour rien : relu avec le decodeur
de l'atelier, uiactionbarfx.blp est identique a son apercu PNG. Ce qui le
distingue, c'est sa taille -- 2048 x 1024, alors que TOUTES les feuilles
que l'addon affiche correctement font 1024 au plus. C'etait la premiere de
2048 qu'on tentait d'afficher.

blp.py sait desormais aussi ECRIRE, dans la seule forme qu'ont les feuilles
deja versees : BLP2 non compresse en BGRA, sans mipmap. tools/petite_feuille.py
s'en sert pour redecouper des elements d'une trop grande feuille dans une
petite en puissance de deux, ecrire le .blp et son apercu, et generer
UIAtlas_07_petites_feuilles.lua -- charge en dernier, il redefinit ces noms,
UIAtlas.data etant une table plate.

Les fourmis et les coins de l'anneau tiennent dans 128 x 128. Le harnais
verifie leur provenance, pour que la grande feuille ne revienne pas.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 01:32:40 +02:00
Adrestie 5eb09d6f79 mod-forever-ui: the bag window measured against the real client
A screenshot of camelot's own backpack settled it. At the 4/3 scale of that
capture the grid is 217 pixels for camelot's 163 units, a slot 49 for 37, the
pitch 56 for 42, the search box 100 wide for the 96 of an edit box whose art
runs 5 past its left, and the whole window 411 for the 305 the formula gives
on five rows. The numbers in the code were right.

So the thirty pixels added by hand go away: the window is again what
CalculateHeight says it is. The capture is kept in docs/reference/ beside the
one of the bottom row, and the measurements are written where they were taken.

The close button becomes the red X of the modern panels, 24 by 24 at (1, 0)
of the top right corner, as UIPanelCloseButtonNoScripts and its default
anchors have it. One more sheet came into the workspace for it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 22:16:58 +02:00
Adrestie 805d25e57b mod-forever-ui: the bag window on camelot's own measurements, and gryphons down 2
The bag window was still laid out on 3.3.5's numbers. It now follows
mainline/ContainerFrame.lua, figure for figure: width 178, five pixels between
slots in both directions, padding of 9 + 48 and thirty more for the search
row of the backpack, money frame 13 high anchored 8 from each side and 8 from
the bottom, first slot sitting on the money frame. The search box no longer
touches the grid, and the window is as tall as what it holds.

The outline was the wrong one. The reference does not frame a bag slot with
the frame of the bags bar: SetItemButtonQuality_Base lays WhiteIconFrame over
the item and tints it with its quality colour, and an empty slot has none --
its background is what shows. That is what is done now, and the money frame
gets the coin box border it was missing.

Two more sheets came into the workspace for this, one of them a plain image
rather than an atlas: tools/ajouter_feuilles.py now knows both kinds.

The end caps go down 2 pixels, as measured on screen. The bars do not move.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 21:57:47 +02:00
Adrestie e6dd4715b9 mod-forever-ui: the bag interface, with its search box and its sort button
The bag windows take the modern panel: the flat background and the metal
nine-slice border of HeldBagLayout, the portrait in the ring of the top left
corner, the title centred in the bar, and item slots on bags-item-slot64.
ForeverUI.SetPanelArt builds that panel and is written to serve every panel
still to come.

The search box and the sort button sit where the reference puts them, on the
backpack alone: the box 96 x 18 at (42, -37), the button 28 x 26 at (-9, -34).
Neither of the two things they call exists in 3.3.5, so both are written here:

- the search compares the typed text with the name, the type and the subtype
  of each item, and veils what does not match with the same black 80% overlay
  the reference uses;
- the sort merges partial stacks, then orders the items by the game's own
  category order (GetAuctionItemClasses), quality, name and stack size, one
  move every tenth of a second because each swap must be confirmed before the
  next.

tools/ajouter_feuilles.py brings a sheet into the workspace with its preview
and regenerates the atlas table; seven sheets came in this way. Previews are
now exported with the alpha channel, without which they cannot be judged.

docs/AMELIORATIONS.md lists what departs from the reference here, the sort
order first: it is decided inside the client and cannot be read.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 20:34:14 +02:00
Adrestie 115de7ed41 Add mod-forever-ui: the modern interface rebuilt for a 3.3.5a client
The addon and the art it needs, read from a modern client and served to
3.3.5 through texture coordinates, since that client has no atlas.

What is in place: player frame with its states, death knight runes, target
frame and its classification rings, cast bar, action bar with its page block
and end caps, micro menu, bags bar, experience and reputation bars. Every
piece registers itself as a movable system.

This folder is the workspace. The addon in a client and the art in patch-Z
are copies tools/deployer.py makes, and what sits under Interface\ForeverUI
in the patch is exactly what data/art holds -- the deployer removes from the
archive anything this folder no longer carries. Each .blp comes with the .png
that shows what it holds.

docs/AMELIORATIONS.md lists what is known to be improvable: where the
reproduction departs from the reference and why, what the 2010 client cannot
do, and the debts left in the tooling.

The repository README also gains the row for mod-limit-break, which was
written earlier and had not been committed.

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