Camelot 70450 donne une variante c60 à toutes les barres et à tous les
voiles des cadres d'unité, et réimplante leur planche (uiunitframec60,
256 x 512 -> 1024 x 512). Les planches uiunitframec60, uipartyframec60 et
uiroguecombopointsc60 de la 70450 (BGRA non compressé) remplacent ou
rejoignent celles de l'atelier ; UIAtlas_04 prend leurs régions
(feuilles 12 à 14), et les noms du groupe quittent UIAtlas_06.
- Joueur : vie (87, -43), ressource (87, -61), nom centré de 116 en
(149, -37), voile de menace centré ; ordre combat, liste de haine, repos.
- Cible : barres identiques pour les créatures négligeables, vie (21, -41),
ressource (17, -60), bandeau (-82, -26), nom centré, voile (-1, 1) ;
cadre 194 x 68 (négligeable 163 x 57) par l'atlas.
- Insigne JcJ du joueur et de la cible : plus de cercle, l'icône seule à
l'échelle 0,8, environ 7 px plus bas.
- Points de combo : l'arc de camelot (cinq points autour du portrait de la
cible, rayon 39,6, de -10° par pas de 21°, depuis 2° avec l'insigne JcJ,
remplis par le haut) remplace le ComboFrame du client.
- Cible de la cible et familier : vie (45, -17,5), ressource (43, -29,5),
nom centré.
- Groupe : vie (47, -20), ressource (45, -31), nom (48, -7) de 55, rôle
(-5, -7), voile (1, -1), statut (-1, -1) ; vie vide pour un membre
déconnecté et mort.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
La fenêtre de butin reprend le LootFrame de camelot : panneau plat
« Objets » de 220 de large et 290 de haut au plus, une carte par
emplacement (fond teinté par la qualité, contour, étiquette de rareté,
bouton d'objet de 37, nom), barre de défilement au-delà, place sous la
souris ou à (16, -116). Le LootFrame du client reste l'hôte, invisible :
événements, liste du butin de maître ancrée au bouton choisi, CloseLoot.
Feuille interface/lootframe/lootframe.blp ajoutée. Animations à venir.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Le Wow.exe d'origine décode chaque BLP dans un tampon unique de
1024 x 1024 en 32 bits : les 22 feuilles non compressées de 2048
(talents, grimoire, barre d'action, journal de quêtes, raccourcis,
création de personnage) y débordaient et faisaient planter le jeu
(ERROR #132 à 0x40CB6A). Réduites de moitié, alpha prémultiplié.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Les écrans d'accueil s'arrêtent au 16:9 comme le client : la scène 3D n'est
plus élargie, les personnages gardent leur taille d'origine sans décors
modifiés. Les 9 UI_*.m2 réduits, dérivés d'un pack HD, faisaient planter les
clients sans ce pack (leurs .skin ne correspondaient pas) : ils sont retirés,
avec la clé replaces et l'extension .m2 du manifeste.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Les .png places a cote de chaque .blp de data/art restent en local (ignores par
mod-forever-ui/.gitignore) ; les captures de docs/reference restent publiees.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- CustomizeUI.lua : bouton Customize UI apres AddOns, grille reglable (pas, origine 3x3),
voiles de selection camelot, 9 poignees sur l'element selectionne, Snap on Grid et
Sticky UI par attraction, fenetre de taille 50-200 %, Cancel / Reset / Validate
- Layout : session de travail, echelle par element, Validate ne touche plus aux places
des fenetres
- griffons detaches de la barre d'action
- art : editmode (camelot) et poignees housing-advancedmode-scale-handle
- banc : textes sans police refuses, fichiers charges sous leur nom, essais de l'editeur
- README reduit a l'essentiel
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Traduction
- Identifiants en anglais dans tout le module : addon, ecrans d'accueil,
outils Python, banc d'essai et patcheur C#.
- Fichiers au nom francais renommes (Gabarits.lua -> Templates.lua,
Textes_*.lua -> Texts_*.lua, deployer.py -> deploy.py,
tools/patcheur -> tools/patcher, etc.).
- Commandes /fui et options de deploy.py en anglais (--check, --server,
--remove-dbc).
- Cles des variables sauvegardees et de data/dbc/statistics.json
traduites, sans reprise des anciennes cles.
- API de la micro-barre : ForeverUI.AddMicroButton(def) avec les champs
name, atlasSet, after, tooltip, onClick, ready, et
ForeverUI.UpdateMicro(name, isOpen).
- Commentaires reecrits en anglais, courts, sans dates ni historique ;
les fonctions au nom peu parlant et leurs parametres sont expliques.
Code mort
- Exports, fonctions et variables jamais lus retires.
- Retires a la demande des modules : ForeverUI.PvPJauge, les exports
FondEntete / TuilerEntete / Polices de TradeSkill, l'art legacy-up-c60,
honorfill(half)blue et inv_misc_book_09, leurs entrees d'atlas et les
parties d'outils correspondantes.
Verifications : liaisons des noms comparees avant et apres, banc vert,
chemins de textures inchanges, generateurs reproduisant les fichiers,
patcheur identique octet pour octet.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Onglet Statistics (StatisticsTab.lua, nouveau)
- Le StatisticsFrame de camelot sur les statistiques de hauts faits du
client (GetStatisticsCategoryList, GetCategoryInfo, GetStatistic) :
categories repliables, sous-categories au bouton campaign_headericon,
survol, barre de camelot masquee si inutile, mise a jour sur
CRITERIA_UPDATE ; l'etat replie survit aux mises a jour.
- Valeurs telles que le client les rend (noms des statistiques
« ... most », montants d'or avec leurs pieces), « -- » sans valeur ;
colonne de la valeur elargie a ce qu'elle porte.
Statistiques de camelot ajoutees aux hauts faits (data/dbc/statistiques.json)
- 14 boss de donjons classiques et 4 statistiques de raids a 20 / 40
joueurs (entrees ; morts, en somme des morts sur les cartes de cette
taille), suivies par le coeur.
- deployer.py, etape dbc (--dbc, --retirer-dbc, --serveur) : lignes
ajoutees au DBC du client dans patch-Z, DBC du serveur recopie du client,
lignes d'achievement_criteria_data (une creature tuee n'est comptee que
si son critere y a une ligne) ; --verifier les controle.
- tools/foreverui/dbc.py : ajout et retrait de ses seules lignes DBC.
Micro-menu et exports pour les autres addons (session Progression)
- BottomBar.lua : ForeverUI.AjouterMicroBouton(def) et
ForeverUI.MajMicro(nom, ouvert) ; ForeverUI ne connait plus aucun
addon qui y ajoute un bouton.
- ForeverUI.PvPJauge (jauge circulaire, textures au choix),
ForeverUI.StatusBarsPoser, exports de TradeSkill.lua.
- Art : legacy-up-c60 (et son masque), honorfill(half)blue,
inv_misc_book_09 ; cuire_masque.py, cuire_portrait.py,
decouper_elements.py.
Banc : essais de l'onglet Statistics et d'un micro-bouton d'un autre addon.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Etape 3
- Maitre (Trainer.lua, nouveau) : liste de camelot (categories
professions-recipe-header, lignes TrainerTextures), filtre, rang de
metier lu dans les competences.
- Maitre de vol (Taxi.lua, nouveau) : TaxiFrame de camelot 590 x 608,
cadre bronze, images de vol 1463 / 1464 (positions reportees du carre
3.3.5), boutons et traits de camelot ; zones BC, Outreterre et Norfendre
sur l'image de 3.3.5.
- Etable (Stable.lua, nouveau) : scene de camelot, fond selon la
specialisation, rangee de 5 centree.
- Sertissage (Socketing.lua, nouveau) : decor et chasses de camelot.
- Boites de dialogue (Dialogues.lua, nouveau) : StaticPopup1-4 aux
contours de camelot (fond sombre, bordure en losanges, croix).
- Gabarits : Gb.CadreSimple (repris de la banque de guilde), Gb.MenuFiltre.
Etape 4 (metiers, disposition de camelot)
- Fabrication (TradeSkill.lua, nouveau) : 673 x 594, liste en arbre,
filtre, recherche, rang, fiche (carte du metier, resultat, reactifs),
boutons ; noms mesures sur un texte a part (une ligne reutilisee coupait
le nom suivant) ; eclat du rang rogne a la largeur du masque.
- Micro-bouton Professions (BottomBar.lua) apres la feuille de personnage.
- Livre des metiers (ProfessionsBook.lua, nouveau) : cartes de camelot,
rangs, sorts securises, oubli ; plus de deux metiers principaux (zone a
defilement, colonnes reduites) ; portrait cuit rond ; onglets lateraux
(ensemble + metiers a fabrication, retrecis s'ils sont trop nombreux) ;
fenetre deplacable (place commune livre / fabrication).
- DropDown : liste du filtre des metiers elargie a ses entrees.
- Art : feuilles et elements des metiers, icones d'onglets cuites
(cuire_masque.py), portrait rond (cuire_portrait.py, nouveau).
- Banc : essais des etapes 3 et 4 ; micro-menu a neuf boutons.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- PNJ (NpcDialog.lua, nouveau) : dialogue et quete, livres et lettres,
petition, registre de guilde a la DA de camelot (parchemin
QuestBG-Parchment, portrait, croix, places de camelot, contours de
qualite des objets).
- Barres de defilement : chacune cachee quand rien ne defile, et sans
elle le contenu laisse a droite la marge qu'il a a gauche (courrier et
papeterie, banque de guilde, hotel des ventes, reputation, competences,
monnaies, contacts, guilde, macros, reglages, chercheur, dialogues des
PNJ) ; ecrans d'accueil : selection des personnages (cartes centrees),
royaumes, AddOns, creation.
- Chercheur de donjon : la liste des donjons reprend la liste a
categories des raids (en-tetes de la feuille, cases de camelot),
l'en-tete gardant sa case "tout cocher".
- Tabard : camera 1 et modele dans la moitie gauche de l'encadre, cadrage
independant de la race (gnome).
- Cabine : portrait a 48 (1, 1.5) ; README a jour (fenetres secondaires,
commerce).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Merchant.lua : ButtonFrameTemplate 336 x 444, portrait et titre du
marchand, encart, fond du bas et du rachat de camelot, argent dore ;
reparations SpellIcon-256x256-Repair* reposees apres
MerchantFrame_UpdateRepairButtons ; nom et contour de qualite ; rachat
115 x 37 et sa fleche ; onglets de Social qui commandent ceux du client
- Trade.lua : 344 x 446, deux portraits sous leur coin de metal, six
encarts, voile et separation de l'autre, argent dore, noms au-dessus du
metal, qualite des objets ; pieces a la taille de leurs textures
virtuelles
- Mail.lua : reception (parchemin, places, contours, Tout ouvrir), envoi
(pieces jointes et barre de camelot), lettre ouverte a droite de la boite
- Bank.lua : grille de camelot (banque et sacs de banque, 8 colonnes, 88
par page, onglets de page), sacs a 0,75 et cadenas ; un clic ou un lacher
pose le sac tenu (PutItemInBag), sinon le prend ; ombres a leur taille ;
recherche et tri des sacs
- GuildBank.lua : BasicFrameTemplate a la taille des textures virtuelles
(coin UI-Frame-TopLeftCornerNoPortrait 33 x 33), coffre de marbre, places
de camelot, journal et information avec la barre minimale, recherche,
onglets du bas
- AuctionHouse.lua : l'hotel de WotLK (Parcourir, Offres, Encheres) habille
camelot : fenetre sur l'art visible de 3.3.5, encadres et fonds
auctionhouse-background-*, categories a trois niveaux (niveaux croissants
: l'ombre de l'art ne change plus d'un bouton a l'autre), lignes (largeur
avec barre, choix, survol, rayures, icone), fleches de tri, champs, cases
a 17 rapprochees, menus compacts a la hauteur des champs, mise en vente
(onglet, cadre d'objet), onglets du bas et titre
- Gabarits.lua : Gb.MenuStyle1(dd, largeur, hauteur, compact) -- hauteur a
l'echelle, mode compact (fond rogne a sa boite, fleche sans ombre, texte
sur la ligne de la fleche) ; la hauteur est tenue apres
UIDropDownMenu_Initialize (le client remet le menu a 32 a chaque
ouverture) -- l'horloge en profite ; Contour, ContourQualite, Qualite,
BarreA
- Bags.lua : le tri des sacs accepte une liste de sacs (banque)
- art : feuilles du marchand, de la banque, de l'hotel (auctionhouse.blp,
fonds decoupes de auctionhousebackgrounds.blp), courrier, banque de
guilde, icones des onglets de page
- banc : faux Merchant/Trade/Mail/Bank/GuildBank/AuctionUI, essais ;
controle de la taille de toute texture d'atlas du commerce ; ouverture
des menus simulee
- non repris : fenetre d'icone d'un onglet de banque de guilde, facture du
courrier, papier a lettres, cabine et barre de mise en vente de l'hotel,
StaticPopup
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- hauts faits (Achievements.lua) : camelot n'en a pas, la fenetre du
client se deplace par son en-tete, place gardee et reposee apres
UpdateUIPanelPositions
- tutoriel (Tutorial.lua) : fenetre, bouton d'alerte et compteur masques
- horloge (TimeManager.lua) : ButtonFrameTemplate 220 x 240, globe en
portrait, encart, menus d'alarme en style 1 (Gb.MenuStyle1), case
d'alarme
- carte de zone (ZoneMap.lua) : cadre battlefieldminimap-border, croix
rouge, alpha suivant l'opacite (image retiree : le client la repose)
- cabine d'essayage (DressUp.lua) : ButtonFrameTemplate 450 x 545, fond de
race, fleches et rotation a la souris
- inspection (Inspect.lua) : 338 x 424, deplacable, portrait 48, onglets
lateraux, page du personnage a la camelot (cadre Char-Paperdoll), page
JcJ en cartes avec en tete le nom du rang et l'embleme de la faction
sous son insigne, Civilian sans rang ni donnees ; bouton Talents
- talents de l'inspecte (Talents.lua) : notre fenetre en lecture seule,
compacte (colonnes de 260, sans portes ni bande du bas), sans recherche
ni points ; elle ne suit pas l'inspection
- JcJ (PvPTab.lua) : seuils de rang lus du serveur (canal d'addon
PVPTITLES de mod-pvp-titles-ext : RANKS, REQ), sans serveur les seules
victoires ; etat Deshonore (DISHONOR) : rang et temps restant, blason
brise de la faction a la place de l'embleme
- debuff Deshonore dessine par ForeverUI en tete des affaiblissements
(Buffs.lua), aucun sort ni DBC requis
- art : blasons brises honor-dishonored-alliance / -horde (cuits par
tools/cuire_deshonneur.py), battlefieldminimap, char-paperdoll-*
- /fui croix : temoin de la croix de la feuille de personnage
- banc : inspection, talents compacts, tete JcJ, canal du serveur, blason
brise, debuff dessine, temoin de la croix
- README : lignes JcJ, fenetres secondaires, ameliorations et affaiblissements
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- infobulles (Tooltips.lua) : decoupe en neuf TooltipDefaultLayout a la
place du Backdrop de 3.3.5, couleurs du client suivies, infobulles des
addons reprises, bandeau de comparaison (tooltip-compare-label), croix
rouge d'ItemRefTooltip
- gabarits communs (Gabarits.lua) : portage en jeu des gabarits valides de
l'accueil -- cadre de dialogue, en-tete, fenetre translucide, encart,
croix, boutons rouge / de panneau / argente, barre MinimalScrollBar
posee sur celle du client, cadre interieur, recopie de texte
- menu Echap (GameMenu.lua) : DialogBorder, en-tete, boutons rouges en
colonne (ecarts de 20)
- Video, Son et voix, Interface (Settings.lua) : fenetre de camelot, croix
= HideUIPanel, listes de categories, cases, curseurs, cadres de groupe,
menus deroulants style 2 (DropDown.lua), onglets MinimalTab ; cadre
interieur Options_InnerFrame pour les trois fenetres ; Interface a la
disposition de camelot (listes a -76, fenetre +36)
- raccourcis (Bindings.lua) : fenetre calee sur l'art visible de 3.3.5,
boutons argentes et lisere du choisi, textes recopies au-dessus
- macros (Macros.lua) : disposition de camelot (338 x 424, portrait,
onglets du haut, grille 6 x), choix d'icone 525 x 495 en rangees de dix
- configuration du chat (ChatConfig.lua) : DialogBorder, boites en
decoupe d'infobulle aux couleurs du client, lignes creees ensuite
reprises, liste des filtres sans lisere
- selecteur de couleur (ColorPicker.lua) : 388 / 331 x 210, places de
camelot, curseur d'opacite du client en colonne alpha (damier, degrade,
fleches) ; OpacityFrame en DialogBorder
- art : tooltiplabel, commonbuttonsdropdown, ui-silver-button-select,
colorpicker (6 entrees d'atlas ajoutees, aucune modifiee)
- banc : vrais types de cadre, OnEnable / OnDisable, OnValueChanged,
couleurs de Backdrop, degrades ; faux et essais des fenetres reprises
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- carte (WorldMapZoom.lua) : zoom a la molette vers le curseur (x 1,25 par
cran, de 1 a 4) et deplacement au glisser ; tuiles rognees a la vue,
reperes hors vue eteints, surface cliquable bornee, fleche du joueur
reposee ; retour a 1 au changement de carte, de mode, a la fermeture
- journal : le micro-bouton et L rattrapes quand 3.3.5 refuse QuestLogFrame
(carte agrandie), marque effacee a l'image suivante au lieu de GetTime
(qui avance pendant l'ouverture de la carte) ; case de suivi redessinee
au clic ; en-tete de categorie en trois tranches, centre en mosaique
- sacs : ecarts comptes et marge haute (ecart assume) ; le sac ouvert est
empile des son ouverture
- trousseau : icone en double densite (feuille uiactionbar2xc60), voile a
la recherche, animation d'entree de camelot
- minimap : la molette fait + et - ; latence du micro-menu : ancre reposee
apres 3.3.5, trait a 3 pixels ; reputation a la place de l'XP au niveau
maximum ; /fui barres plus disert
- ajouter_feuilles.py : un nom logique deja servi par une autre table garde
sa feuille
- banc : cadres de carte freres de WorldMapDetailFrame, panneau "full",
carte lente a charger ; AMELIORATIONS.md vide, NOTES.md a jour
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- cinematiques (ForeverUIGlueCinematics.lua) : le CinematicsMenu de
camelot sur les films du client -- fenetre 819 x 559, vignettes
StreamCinematic-*-Large, bouton de lecture, surbrillance, case des
sous-titres ; sous-titres des films en bas de l'ecran (SubtitlesFrame)
- credits (ForeverUIGlueCredits.lua) : fond et illustration de
l'extension (tuiles, ForeverUIGlueIllustrations.lua), degrades, logo,
colonne de texte pleine hauteur, boutons de vitesse, Back / Expansion,
liste des extensions ; textes, musique et bascule restent ceux du client
- connexion : un seul fondu d'apparition (celui du client est retire)
- decouper_elements.py : CreditsScreen-Selected / -Highlight ; table
d'atlas des ecrans d'accueil completee
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 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>
- 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>
- 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>
- 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>
- 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>
- 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>
- 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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>