- 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>
- 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>
- 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>
Quinze factions font trois blocs de quinze lignes : illisible quand on
cherche ce qui bouge sur une seule. Le temoin prend desormais un filtre
-- /fui reput Alliance -- et les trois blocs s y plient.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
mod-pvp-titles pose des CharTitles -- 1 a 14 pour l Alliance, 15 a 28
pour la Horde, verifie dans le CharTitles.dbc du serveur -- et ne touche
jamais UnitPVPRank, qui reste donc a zero pour toujours. Le rang se
demande au plus haut titre connu.
IsTitleKnown rend un NOMBRE, 0 ou 1, et zero est VRAI en Lua : le client
ecrit `if ( IsTitleKnown(i) ~= 0 )`. Ecrit autrement, la boucle partait
du rang 14 et s arretait au premier tour.
La progression se calcule sur les victoires honorables comparees aux
seuils du serveur, recopies de sa configuration : aucune fonction du
client ne les donne, c est le seul ecart qu il ne peut pas verifier.
Elle s ecrit en chiffres, "victoires / seuil", comme le fait
CurrentRankProgressField.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Deux questions a la fois, pour le bouton du personnage signale decale et
sans reponse au clic.
L'ANCRAGE de chaque bouton dit s'il a bouge : nous les posons une fois, a
gauche du bandeau, d'un pas fixe. Un ancrage sur autre chose que notre
bandeau, un decalage qui n'est pas un multiple du pas, ou plus d'un point,
veulent dire que quelqu'un les a repris.
GetMouseFocus, pendant cinq secondes, dit qui recoit reellement le clic : un
bouton peut etre au bon endroit et recouvert.
Lecture du cote client : en 3.3.5, seul VehicleMenuBar_MoveMicroButtons les
deplace, et CharacterMicroButton_SetPushed ne change que le rognage et
l'alpha du portrait -- ni position, ni verrou. La cause n'est donc pas la.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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>
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>
Pour chaque ligne visible : ce que GetFactionInfo rend brut -- attitude,
seuil, seuil suivant, valeur -- puis ce qu'on en fait : barre visible,
largeur du remplissage, teinte appliquee. C'est la seule facon de departager
une donnee fausse d'un affichage faux.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Renommer un ensemble laissait la liste vide jusqu'a l'operation suivante.
Le rattrapage d'une image manquait encore la publication du client : les
ensembles vivent cote serveur, et aucun moment n'est sur -- ni le retour de
SaveEquipmentSet, ni l'instant de EQUIPMENT_SETS_CHANGED, ni l'image d'apres.
Le panneau compare donc toutes les 0,2 s ce que le client rend au contenu
affiche, et repose les cartes des que cela differe. Liste inchangee, rien
n'est repose. Le controle ne tourne que panneau ouvert.
Le banc rejoue desormais le pire cas -- evenement avant publication,
rattrapage dans le vide, plus rien d'annonce ensuite -- et verifie qu'un
seul battement repare, sans pose inutile quand la liste ne bouge pas.
Ajoute /fui sets : temoin des trois etats qui decident de l'affichage.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Releve dans Wow.exe : ce client ne porte que SetModelScale et
SetPosition. Ni SetCameraDistance, ni SetCameraPosition, ni
SetCameraTarget, ni SetCustomCamera, ni SetPortraitZoom.
SetModelScale reduit le modele autour de son origine, camera fixe : il
parait donc aussi glisser vers le bas. SetPosition l'eloigne devant la
camera, ce qui le rapetisse sans changer son cadrage.
Aucune des deux valeurs ne se releve dans la source -- camelot cadre par
une scene que 3.3.5 n'a pas -- d'ou /fui modele pour les juger a l'oeil
sans recharger l'interface.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Un bouton d'equipement qui ne repond pas est soit recouvert par un cadre
qui prend la souris, soit prive de ses scripts : rien de tout cela ne se
voit a l'ecran. Le temoin rend l'etat du bouton (strate, niveau, souris,
scripts), la liste de tout ce qui couvre son centre en prenant la souris
avec strate et niveau, puis pendant cinq secondes ce que GetMouseFocus
rend sous le curseur.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
One block at the head of Bags.lua holds them all -- slot size, the gap
between slots, columns, the margins of the grid, the header and the search
band, the search box, the sort button, the money frame and its border, the
close button, the portrait, and an overall scale. Each line carries camelot's
own value beside it. Nothing in the layout is written twice: the window, the
grid and everything on it are computed from these numbers, so a single change
redraws the lot.
They can be tried without reinstalling anything:
/fui sacs prints the settings and what the frame
actually measures
/fui sacs emplacement 44 sets one and lays the window out again
The window is now 179 by 265 instead of 178 by 263: the margins are stated
one by one rather than lumped into camelot's padding, and the money frame's
border, which stands two pixels proud, is now counted.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Pixel measuring on a screenshot cannot separate a 240 unit window from a 263
one once the client's own scale is in the way. The debug line now reads the
numbers out of the game itself: slot count, rows, frame size and scale, then
the header, the grid, what lies under it, and the money frame.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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>