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>
mod-forever-ui
The modern World of Warcraft interface, rebuilt for a 3.3.5a client.
This is not a module the server loads: it is a client addon plus the art it
needs. The art comes from a modern client, read sheet by sheet, and is served
to 3.3.5 the way the modern client serves it -- one texture, a rectangle read
inside it -- because 3.3.5 has no SetAtlas.
One section is one whole piece of the interface. A section is done when the
game has shown it right and it has been accepted, which also makes it a piece
nothing else is allowed to disturb.
| Section | What it holds | State |
|---|---|---|
| Player frame | Frame and portrait, health and power bars, rest and combat states, threat, vehicle art, PvP icon, raid subgroup indicator, play time, incoming damage, and the death knight rune bar. | done |
| Target frame | Frame and portrait, health and power bars, the reputation band, and the art each classification calls for: ordinary, minus, rare, elite and rare elite dragons, world boss ring. | done |
| Cast bar | Standard, channelled and uninterruptable casts, the interrupted state and the shield. | done |
| Action bar | The button and all of its states, the page number block, the two gryphon end caps. The button art reaches every action button the client carries, the secondary bars included. | done |
| Stance bar | Forms, auras and aspects, on the smaller button they share with the pet bar. | done |
| Pet bar | The familiar's buttons and their states. | done |
| Micro menu and bags bar | The micro buttons, and beside them the backpack, the bag slots and the keyring. | done |
| Experience and reputation bars | Both bars, their fills, and the reputation colour per standing. | done |
| Bags | Panel, slots, search box, sort button, round portrait in its ring, and under the money the currencies the player has chosen to watch. | done |
| Character sheet | The window and its two panes, the 3D model, the equipment slots, the side tabs, the level and class line, resistances, and the stat lines -- now on a banded background under a framed category header. The right pane opens on three tabs: character stats, the equipment manager (set cards in the player's own order, the worn-set check, rename and delete, New Set, and the icon picker beside the sheet), and the titles the character has earned, the worn one ticked. The right pane folds away, and the side tabs stay where they are. |
done |
| Reputation | The factions the player knows, their blocks folded and unfolded, a standing bar per faction, and beside it the faction's own description with its three switches. A faction at war wears its own colour. | done |
| Skills | The skill lines the player knows, their blocks folded and unfolded, a bar per skill, and beside it the skill's description. | done |
| PvP | The season, the rank and its badge, and the ring filling towards the next rank. The ranks come from the titles the server awards, the honourable kills being what moves the ring; the thresholds, and the Dishonored state with its broken crest, are read from a server running mod-pvp-titles-ext -- without it, the kill count alone. Beside it, what the client still knows of honour. | done |
| Currency | Everything the player carries, by category, folded and unfolded, with the icon each currency uses, and beside it the two switches the client offers. | done |
| Pet | The familiar in three dimensions, turned with the same arrows as the player, and beside it its level and name, its general statistics and its resistances as icons. | done |
| Statistics | -- | the tab exists, its screen is left empty on request |
| Dropdown lists | The list a dropdown opens, which is one and the same for every menu in the game: background, rows, font, check box and tick, and a width that follows the menu that opened it. | done |
| Minimap | The map in its modern frame, the clock and the calendar, the player's coordinates, and the arrows on the edge. | done |
| World map and quest log | The map in a window the player can move, the quest log as a pane beside it with the list and each quest's page, the maximized map, and the floor selector of dungeons. | done |
| Quest tracker | Quests and achievements under their headers, folded and unfolded, the objectives ticked as they are met, the sort and filter menu, a left click opening the quest on the map. | done |
| Chat | The window on its background, the button column, the thin scroll bar and the flashing return-to-bottom button, the friends button, the tabs and the dock, the input box. At rest only the messages remain; the window lights up under the mouse. Holding Alt and dragging selects text as in an editor, Ctrl+C copies it, and any other action clears the selection. | done |
| Tooltips | The reference's tooltip frame, cut in nine, in the colours each tooltip asks for -- the add-ons' tooltips built on the client's templates included -- the header of a comparison, and the red cross of a linked item. | done |
| Game menu and settings | The Escape menu, the video, sound and interface options, key bindings, macros and their icon picker, chat settings, the colour picker and the opacity slider. | done |
| Secondary windows | The clock and the zone map in the reference's frames. The achievements window keeps the client's look -- the reference has none -- and moves by its header. The tutorial is hidden: it does not fit this interface. The dressing room, and the inspection of another player -- equipment, PvP rank, and the talents in a compact window of their own. | done; the calendar and help keep the client's look, on request |
| Buffs and debuffs | The buff and debuff bars with their timers, weapon enchants, and consolidated buffs, and the Dishonored debuff the server announces. | done |
| Party and raid frames | The party frames beside the screen edge, and the compact raid frames in groups. | done |
| Spellbook | The book on one page or two, a category per tab, the spells in a grid under the category's name, passives round, similar spells grouped on flyouts, the settings menu, and the search with its preview. Pages, categories, flyouts, the size and the settings all work in combat. | done |
| Talents | The talent trees, the specializations, the pet's talents, the glyphs and the search. | done |
| Social | Contacts (friends and ignored), who, guild, chat channels and raid, in one window with its bottom tabs; the micro button wears the guild tabard. | done |
| Guild tabard | The window where a guild designs its tabard, the character standing in it. | done |
| Trade and banking | The merchant with its repairs and buyback, the trade window, the mailbox and the open letter, the bank and its bags on one grid, the guild bank, and the auction house -- its three 3.3.5 tabs in the reference's frame. | done |
| Group finder | The dungeon finder and the raid browser in one movable window with side tabs. Dungeons: roles, the dungeon types as buttons with the chosen one's description and rewards below, the specific dungeons list. Raids: a bottom tab to list the group -- the raids under folding categories like the character sheet's, and a comment -- and one to join, a raid's players and groups with their tooltip. | done |
| Login screens | Login, the main menu, character select and creation, the dialogs, the realm list, the AddOns list, the options (video and sound), the cinematics and the credits. | done; the other login screens are left as they are, on request |
Everything ForeverUI places is a movable system: /fui opens the edit mode,
/fui reset puts a piece -- or all of them -- back where the reference puts it.
Languages
No text is written in the code. A text the 3.3.5 client already knows is read
from its own strings (GlobalStrings.lua, GlueStrings.lua at the login
screens), so it follows the client's language by itself. Every other text is
read from a language file, English being the base:
data/addon/ForeverUI/Textes_enUS.lua in game, English
data/addon/ForeverUI/Textes_frFR.lua in game, French
data/glue/Interface/GlueXML/ForeverUIGlueTextes_*.lua login screens
A key missing from a language shows the English text, and a client whose
language has no file reads English. To add a language, copy the enUS file to
the client's locale code (Textes_deDE.lua...), translate the values without
touching the keys or the %s / %d (same number, same order: Lua 5.1 cannot
reorder them), and list the file after the English one in the .toc (or in
ForeverUIGlue.xml). The mock client refuses a key used in the code that is
missing from English or French.
Layout of this folder
data/addon/ForeverUI/ the addon itself, .lua and .toc -- the source
data/glue/ the login screens, which go into patch-Z
data/art/interface/ the .blp that go into the client patch, each with
a .png beside it to see what it holds
docs/AMELIORATIONS.md the points asked for, and nothing else
docs/NOTES.md working notes: departures, traps, tooling
docs/reference/ screenshots of the real thing, to check against
tools/deployer.py puts the addon in a client and the art in patch-Z
tools/test_addon.py a mock client that loads the addon and checks it
tools/ajouter_feuilles.py brings an atlas sheet in with its preview, and
regenerates the atlas table
tools/cuire_masque.py bakes a mask into an icon's alpha, for the cuts
3.3.5 cannot make on screen
tools/decouper_elements.py cuts elements out of sheets too wide for 3.3.5,
each at its own size
tools/cartes_instances.py generates the dungeon and raid maps by name, in
every language the client's map addon knows
Working on it
This folder is the workspace, and the only place anything is edited. The
addon in the client and the art in patch-Z.MPQ are copies the deployer makes;
editing either of them directly means the work is lost the next time anything
is deployed, and nobody can say afterwards what the game is actually showing.
The rule holds both ways: what sits under Interface\ForeverUI in the patch is
exactly what data/art holds, file for file, byte for byte. --verifier
reports what is missing, what differs and what is left over, and a deploy
removes from the archive anything this folder no longer carries.
New art follows the same path: the .blp and its .png preview land in
data/art first, then the deployer puts the .blp in the patch.
python tools/deployer.py --verifier compare the client with this folder
python tools/deployer.py addon and art
python tools/deployer.py --addon the addon alone, client may stay open
python tools/deployer.py --art the art alone, close the client first
python tools/deployer.py --glue the login screens, close the client first
The addon files are read at login: after --addon, a /reload in game is
enough -- unless a file was ADDED. The client lists an addon's files when it
starts, and /reload replays the ones it already knows without discovering a
new one: a new .lua needs the game closed and reopened, however plainly it
sits in the .toc. The art lives in patch-Z.MPQ, which the client keeps locked while it
runs: close the game before --art, and start it again afterwards.
Before delivering anything, run the mock client -- it loads the whole addon and checks the measurements taken from the reference:
python tools/test_addon.py
It checks numbers, nothing else. What a thing looks like is settled in the
game, and only there. Composing the art in Python and looking at the picture
was tried and thrown away: such a picture only proves the arithmetic, since it
knows nothing of draw order, of what the client draws over it, or of the scale
it ends up at -- it showed windows as correct that the game showed wrong. The
screenshots under docs/reference/ are the other half: they are the real
client, and they are what a result is compared against.
Where the reference comes from
Every size, offset and texture name is read from the interface code of a modern client, not guessed. Each file of the addon opens with the survey it was built from: the file, the template and the line that gives each number. When this addon departs from that reference -- because 3.3.5 cannot do it, or because the result was wrong on screen -- the departure is written down at that spot, with what was measured.
The art set is the one that client actually displays: sheets whose names carry
the c60 suffix, and the camelot suffix for the status bars.
Licence
GPL-2.0-or-later, see LICENSE. tools/foreverui/mpq.py reads and writes MPQ
archives; it is the copy this module carries, as each module in this repository
carries its own.