Glyphic: Immersive RP Languages

Speak and understand the languages of Azeroth in chat — Old God, Demon, and more lore friendly options.
Back to Files

v0.6.0

File nameGlyphic-v0.6.0.zip
Uploader
JesseModsJesseMods
Uploaded
Oct 11, 2026
Downloads
151
Size
1.1 MB
Flavors
MoP ClassicRetailClassicForever
File ID
9140270
Type
R
Release
Supported game versions
  • 12.1.0
  • 5.5.4
  • 4.4.2
  • 3.4.5
  • 1.60.1
  • 1.15.9

What's new

## [0.6.0]
- **Full immersion.** A new option under Languages & Fluency: *Remove in-game
  learned languages*. With it on, Common and your racial tongues stop being
  automatic -- you read them exactly as well as your fluency in this addon
  says you do, and no better. A night elf who never studied Orcish cannot read
  Orcish, whatever her character sheet says.
  The garbled text is the game's own. Glyphic uses Blizzard's actual word
  tables and Blizzard's actual hash, so a line hidden by the addon reads the
  way a line hidden by the client reads -- right down to "lol" coming out
  "Kek". Partial fluency works the way the game's does too: the same words
  stay legible every time, so re-reading a line never changes what it said.
  Off by default and it stays off; this is not something to discover after an
  update. NPCs have their own separate switch, since a boss callout is a
  mechanic as much as it is flavour. Which channels it applies to follows your
  existing Chat Channel settings.
- **General, Trade and custom channels**, under a switch of their own. Full
  immersion works by taking back a translation the client already performed, and
  those channels never got one: the game attaches no language to them at all,
  which left a hole you could see through. The stranger beside you was
  unintelligible in `/say` and perfectly intelligible one channel over.
  Closing it means lending those lines a tongue they never had, so it is asked
  for by name and off by default. The tongue is your own faction's -- the same
  one the people around you are speaking, so a line of Trade chat reads as the
  language of the person standing next to you rather than as a fifth thing.
  Emotes are left alone either way. An emote is narration, not speech, and
  running "Thrall waves." through a tongue has the narrator speaking a foreign
  language about somebody in the third person.
  The *Mythic* challenge turns it on and holds it there. Trade chat is how a
  player finds a group, a summon or a portal, which is why no other tier takes
  it -- on the three tiers you level through, losing that is a cost nobody
  signed up for. On Mythic, being unable to ask is the run.
- **Quest text, gossip and the objective tracker**, under a third switch of
  their own, nested under the NPC one and off even when everything above it is
  on. Everything else immersion touches is text the client would have garbled
  by itself; a quest window carries no language at all, so hiding one is the
  addon's own idea and has to be asked for by name rather than arriving with
  the rest.
  An orc quest giver hands you an offer in Orcish; a night elf hands you one
  in Darnassian. It's remembered per quest, so your journal still reads in the
  tongue of whoever gave it to you long after they're out of sight.
  Quests already in your log when you switch this on fall back to your own
  faction's tongue -- Orcish for Horde, Common for Alliance. Nothing in the
  game will tell an addon who gave you a quest after the fact, so this is
  knowingly the wrong answer for the tauren who actually handed it over; the
  alternative is a log that stays in English forever for everything you were
  carrying that day. Handing one in replaces the guess with the truth, since
  returning to the giver is the second and last occasion they and the quest
  are in the same place, so the log corrects itself as you play.
  A quest with nobody behind it is a separate case and stays in plain words:
  one you start by right-clicking something in your bags, or by walking into
  a place, or off a bulletin board. There is no API that says "this came from
  an item" and none is needed -- the absence of a speaker is the signal, and
  it is recorded as an answer so those never get swept into the guess above.
  Working out which tongue that is takes some doing, because the game does not
  tell addons an NPC's race and never has -- race is a thing player characters
  have, and a quest giver is a creature with a model. Asking is not an option,
  so Glyphic reads two things it can see and takes the stronger one.
  First, who the NPC answers to: the reputation faction on its tooltip. An NPC
  under "Thunder Bluff" is a tauren, one under "Bilgewater Cartel" is a goblin,
  one under "Darkspear Trolls" is a troll. Not a race, but right about the
  tongue nearly every time, and right even for the lone tauren posted out in
  the Barrens. Factions are matched by id and named by your own client, so this
  works the same on a German install as an English one.
  Second, where you are standing. Mulgore speaks Taur-ahe, Durotar Orcish,
  Tirisfal Gutterspeak, Dun Morogh Dwarvish, Eversong Thalassian, and so on
  through the racial homelands. Weaker than the faction and treated as such --
  a zone cannot tell the goblin from the orc beside him -- but in a homeland
  nearly everyone is the one thing, and mixed zones like the Barrens claim
  nobody and hand the question back.
  Only when both come up empty does it fall back to the NPC's side, Orcish for
  Horde and Common for Alliance. If your records were written before this --
  a troll or goblin reading Orcish -- `/glyphic quest reset` clears them.
  A quest's tooltip and the link you paste in chat are in its tongue too.
  Those are the two places the text does not come from anything an addon can
  read: shift-click a quest in your log and the client builds that tooltip
  itself, out of its own copy, without asking Lua a thing. So the title and
  every objective arrived in plain English no matter how thoroughly the
  journal beside them was hidden -- which was a hole in the fiction for
  anybody using this, and a way around the whole feature for anybody on a
  challenge run. The counters are left alone, the same as in the journal: a
  number reads the same in every language.
- **Quests teach you the tongue they were given in.** A third way to earn
  fluency, on the Language Trainer panel beside passive learning, and the only
  one that works for somebody playing alone: the trainer is a minigame you have
  to go and sit down at, and overhearing only counts other players' tagged
  speech. Under full immersion that leaves a solo character with every word
  around them hidden and no way up. Finish a job for somebody and you come away
  with one word of their language.
  One word is a literal quantity, not a figure of speech. Fluency is already
  "what fraction of the words come through clear", so one word out of a
  tongue's vocabulary is exactly that fraction, and the vocabulary is Blizzard's
  own word list. Orcish has a hundred words, so Orcish takes a hundred quests.
  Zandali has 77 and Gnomish 128, and those take 77 and 128. There is no dial
  for this because the answer was already written in the word list.
  Which quests count is the game's own question about which quests are worth
  doing. While you are levelling a quest has to be green or better -- the band
  that still pays experience -- so a level 40 cannot farm a starting zone for a
  hundred cheap words. That band widens as you level, because the client's own
  green range widens, so the rule keeps meaning the same thing at every level.
  At the level cap it inverts. Nothing pays experience up there, so the same
  rule would switch the feature off at exactly the level most roleplayers live
  at; at the cap, every quest counts. The cap is whatever your client says it
  is, so it is 60 on Classic and 90 on retail without either being written
  down anywhere.
  Quests with no recorded tongue teach nothing, which is the same two cases the
  journal already refuses to guess at: one taken before any of this was on has
  no giver left to ask, and one off an item or a bulletin board had no speaker
  to learn from.
  A small toast says *Word Learned!*, shows you the word and what it is the
  word for -- *Pikialo = learned* -- and counts it underneath: *Taur-ahe,
  43 of 105 words*. It can be dragged anywhere you like, and three hand-ins at
  a quest hub queue up rather than overwriting each other.
  It arrives rather than appearing: a small overshoot past full size that
  settles back, and a band of light that crosses it once. Both are per-style,
  and both are off on *minimal*, because a style whose description is "no
  furniture" should not then jump at you.
  And it stays long enough to read. A word learned is the one thing this
  addon says that you cannot go and look up afterwards, and four seconds of
  it landing next to a closing quest window was not enough -- the holds are
  between six and ten seconds now. It also waits its turn behind the level-up
  text and the boss banner instead of being drawn under them, for up to
  twenty seconds, after which it goes ahead anyway rather than being lost.
  The translation is real, which took some finding. Blizzard's word lists have
  no meanings in them -- they are a bag of tokens the client swaps in, and
  nothing in the game data says what any of them stands for, so a toast that
  claimed *Pikialo = tree* out of nowhere would be inventing a dictionary.
  But the substitution runs the other way and is deterministic: the client
  hashes the *English* word and uses that hash to pick the replacement, so
  "learned" comes out as exactly one Taur-ahe token every time. Start from the
  English side and the pair is a fact rather than a guess.
  The same hash decides legibility, which is what makes "the word you just
  learned" answerable at all. A word comes through clear once its hash clears
  your skill, so the English words have a fixed unlock order and the toast
  names the next one over that line -- the word this hand-in actually bought
  you, not an arbitrary one off the list. It is reading the mechanic rather
  than describing it.
  It is said in that direction on purpose. Several English words hash into the
  same token, so *Pikialo = learned* -- how "learned" looks in Taur-ahe -- is
  true where *learned = Pikialo* would claim the token uniquely means it.
  Words shorter than four letters are never named: *Mog = at* is technically a
  lesson and reads like a glitch. That only decides which of the legible words
  gets named, never which ones are legible.
  It comes in seven looks: *slate* (dark panel, gold edge), *parchment* (a note
  from the quest giver), *banner* (wide, no box, like zone text), *minimal*
  (one quiet line and no furniture), *achievement* (heavy gold frame), *ember*
  (near-black, warm edge) and *loot*, which is the odd one out.
  *Loot* borrows the shape of an item drop, because a loot row and a learned
  word are the same two facts in the same arrangement: an icon, the thing you
  got, and underneath it where it came from. So the word sits where the item
  name goes, wearing its tongue's colour the way an item wears its quality's,
  and the tongue sits   underneath where the looter's name goes. A gold hairline
  above and below sets the row off the way the loot feed is set off -- the
  same divider the level-up text and the boss banner are drawn between, cut
  out of the game's own art rather than drawn fresh, so it ages with the UI.
  It has no hard edge either: the panel bleeds away to nothing at both ends
  rather than stopping at a rectangle, so it sits on the world instead of on
  top of it. Only the borderless styles can do that -- a fade inside a drawn
  frame just looks like a mistake -- so it is a per-style setting and the
  framed ones keep their edges.
  It is the default, because it is the one that looks like the rest of the
  game rather than like an addon.
  That colour is a per-style decision rather than something the toast always
  does. The language colours were picked to read against the dark chat frame,
  and every one of them disappears into *parchment*'s tan -- Common is nearly
  white -- so parchment keeps its own dark ink and the rest take the tongue's.
  `/glyphic toast` shows you the one you are on and lists the rest,
  `/glyphic toast next` steps through them, and `/glyphic toast <name>` picks
  one. Every one of them previews a real toast on screen rather than
  describing itself, because choosing between seven looks by reading seven
  adjectives is no way to choose, and finishing seven quests to see them is
  worse.
  `/glyphic quest reset` forgets every recorded tongue, for when the records
  are wrong rather than missing. The right one is written down again the next
  time you stand in front of the giver.
  `/glyphic quest` says which of the four reasons a quest is reading plainly
  -- the feature off, the wrappers not on, the quest predating the record, or
  the client not saying which quest is open. Three of those are not faults,
  and they are indistinguishable from the chair.
  Two of the four surfaces it touches now have switches of their own, under
  the quest one, because they are not the same kind of thing as the rest.
  Everything else here is prose: a story you can be shut out of and lose
  nothing but the story. The objective tracker and the list of replies you
  click to answer an NPC are the parts you operate the game with, and hiding
  those stops being flavour and starts being a difficulty setting.
  *Include your quest log and the objective tracker* is on, because the
  quest checkbox always named it and turning it off would quietly make a
  setting you already ticked do less than it did yesterday.
  That switch covers the whole page: **the titles down the side of the
  journal as well as the checklist under them.** The titles were held back
  from it at first, on the grounds that a title is your own shorthand for a
  job you already took rather than anything the giver said. That held while
  the prose was the only thing hidden. It stops holding once the page itself
  is the point -- a list of plain English titles sitting over garbled
  objectives reads as the feature half working rather than as a decision.
  Zone headers stay readable either way: a header is the client sorting your
  log by zone, not a thing anybody wrote, and garbling one costs you the
  ability to find a quest without buying any more of the fiction.
  It is also the switch that says **the written word itself is foreign**, so
  a quest with nobody behind it stops being readable with it on. With only
  the prose hidden, nobody said it and so nothing is hidden -- a letter in
  your bags is a letter. With the journal hidden, a notice board in Darnassus
  is not written in English for your benefit, and leaving it plain put a
  readable quest in the log beside garbled ones from the NPC standing next to
  the board.
  **Fixed: some objectives were garbled and others were not.** There are
  three ways to ask the client for an objective and only two of them were
  covered. `GetQuestObjectiveInfo` answers one objective at a time and is a
  separate call rather than a wrapper over the other two, so a journal could
  show one quest's objectives in a tongue you do not read and the next
  quest's in plain English, in the same list, with no visible reason.
  One of the title wrappers is held back on clients that have Edit Mode.
  Replacing anything in a Blizzard table makes every caller of it run
  tainted, and `C_QuestLog.GetInfo` is the call the objective tracker and
  Edit Mode lean on hardest -- which is how the tracker ends up refused the
  auras it asks for in the middle of its own update. Keyed on whether the
  client has Edit Mode rather than on which game it is, because the obvious
  guess was wrong: Forever has Edit Mode as well as Retail. The clients
  that keep it lose nothing, since those are also the ones that still have
  `GetQuestLogTitle`, which covers the same list from the other side.
  **The replies you click to answer an NPC are now readable by default**,
  which is a change. They were garbled along with everything else, and the
  result was a character with full immersion on who could not find *I wish to
  train* in a trainer's menu -- not a hard game, a broken one. Nothing named
  that surface on any checkbox, so nobody had asked for it. It is still there
  under *Include the replies you click to answer an NPC*, off until you say
  otherwise, and the Hard tier of a challenge turns it on for you.
  Two things are deliberately left alone. The buttons are yours, not theirs --
  Accept still says Accept and still works, because not understanding somebody
  has never stopped anyone agreeing to fetch ten boar livers. And the titles in
  your quest log stay readable, so you can still tell one job from another and
  abandon the right one.
  This is the one place Glyphic hides something the game never hid, since quest
  text carries no language of its own. It works with replacement quest frames
  (Immersion, Storyline and the like) because it changes the text the game
  hands out rather than the frames that draw it.
  One honest limit: this can only ever take understanding away. Speech in a
  language your character never knew is scrambled by the game before any addon
  can see it, and the original never reaches your computer -- so those lines
  are left exactly as they arrived, at any fluency. No addon can undo that one.
  Garbled speech is colored only if you asked for it. A line hidden this way
  is indistinguishable from one the game hid itself, so it follows *Tint
  in-game languages* under Chat Channels like any other line of real Orcish,
  rather than painting itself.
- **Challenges.** A new entry at the foot of the main panel's list of places
  to go, and the last thing under Glyphic in Blizzard's settings tree, under
  a rule of its own in both because a challenge is not a preference:
  everything above that line is somewhere you go to tune the addon, and this
  is the one that changes what the addon is doing.
  The rule in Blizzard's sidebar is a line the settings API does not offer.
  That API registers pages and nothing else, so the only thing an addon can
  put in that list is another entry -- and the line is one, drawn with the
  game's own divider texture. Clicking it opens what it was drawn above,
  since a line is not a page and a blank one would be the only alternative.
  The first one is **Stranger**. You arrive understanding nobody -- every
  quest and every NPC is in a tongue you do not speak -- and the only way out
  is to work for the people who speak it. Starting requires a genuinely fresh
  character with no other challenge running, wipes every language you
  have learned, and belongs to that character alone.
  The three difficulties each take away one more thing, and each one asks
  more of you for a word. On *Easy* quest text, gossip and NPC speech are all
  in a tongue you do not have, and a quest finished teaches you a word of it;
  your objectives stay readable, so you always know what to do -- just never
  why. *Medium* writes your journal and your objectives in it too, so working
  out the job is part of the job, and a word takes a couple of hand-ins.
  *Hard* hides the quest
  tracking entirely and every name over every head with it -- you are
  somewhere, being asked for something, by someone -- and a word takes a
  handful.
  The words land in whatever tongue each quest was given in. That spread is
  the point: a run
  ends as a travel history rather than a single bar -- fluent in Orcish,
  conversational in Taur-ahe, a smattering of Zandali -- which is what
  actually happened to you.
  For the length of a run the settings the challenge publishes go grey, as do
  the fluency slider and the two learning toggles. Everything cosmetic stays
  live; locking the toast style would cost you something and buy the challenge
  nothing. Importing a profile is refused outright rather than audited, since
  it would replace the run's own record along with everything else.
  It is an honour system with a tripwire. Saved variables are a text file on
  your disk and there is no pretending otherwise, so rather than guard the
  file, Glyphic checks the locked settings on every login and whenever
  anything changes, and a run that moved one is marked *Voided at level 23:
  the gossip list was changed*. The run keeps going and the record keeps its
  numbers; it simply says what happened. The settings stay locked on a voided
  run, because unlocking would make breaking the run the fastest way to get
  your settings back.
  Abandoning puts every setting back where it was -- including the ones that
  had never been set, which go back to unset rather than being left forced on
  -- and keeps the fluency you earned. You did learn it, whatever became of
  the run. The finished record is kept and shown under the next one.
  `/glyphic challenge` prints it: the tier, the level you started at and where
  you are now, the quests handed in, and the spread across tongues.
  `/glyphic challenge abandon` ends one.
- **A fourth difficulty: Mythic.** Everything Hard hides, and you are a
  foreigner on top of it. The other three tiers are about what you cannot
  read; this one is about what nobody can read of you.
  All three share a hole that is only obvious once you have seen it. A fresh
  run has nothing learned, so your own fluency is zero, so your speech goes
  out as plain English -- everybody around you is unintelligible and you are
  perfectly intelligible to everybody, which is the opposite of arriving
  somewhere nobody speaks your language. Mythic closes it by giving your
  character a native dialect nobody on the continent speaks: *Legendspeech*.
  Nobody can read a word you say, with this addon or without it.
  Learning the languages you were born speaking is what turns your speech
  back into English. The better you know the locals, the less of Legendspeech
  is left, and the words it stops covering leave your mouth in plain words --
  so the run is won by becoming legible, and a stranger reading your /say can
  watch it happen. It opens slowly: a quarter of the way to fluent still
  leaves almost all of a sentence foreign, and then it comes apart over the
  back half, which is where "they could not understand me until I had nearly
  finished" actually lives. The panel shows both halves, because they answer
  different questions -- how well you know the locals, and how much of that
  has reached your mouth. A run showing only the second looks like nothing is
  happening for the first few hours.
  You are in character on every channel for the length of the run and cannot
  switch it off. That switch is the run here rather than a preference, which
  is why this is the only tier that holds it down. Emotes are the exception
  and are pinned off: an emote is narration rather than speech, so running
  "/e straightens her cloak" through a tongue has the narrator speaking
  Legendspeech about you in the third person.
  Legendspeech arrives with an accent of its own, *Living Legend*, locked for
  the run alongside it -- which is the one piece of this that is a joke. It
  adds nothing but a flourish on the end of a line, in plain English, on a
  sentence nobody can read: *Based.* *No cap.* *Massive W.* You are the only
  person in the room who knows what you just said, and you are very pleased
  with it.
  Reach the level cap and Legendspeech is yours for good, on every character.
  The lock lifting is the point -- it turns the thing that was the run into an
  ordinary accent and an ordinary tongue you can switch off.
  All of which is in here because this is where you read about a thing before
  deciding. On the panel it is two sentences: everything Hard hides, plus you
  speak only Legendspeech and whatever you learn, and reaching max level means
  you keep it. Everything above is on the box that asks you to confirm, which
  is the point at which the detail is worth having.
- **Fixed: a Mythic run's chat came through in plain white.** Not a colour
  bug, in the end. Legendspeech is deliberately hidden until you have earned
  it, and the chat filter was looking tag names up against the list you pick
  a language from -- so for the whole of a run, every line of Legendspeech
  resolved to no language at all, and that took the tag colour, the speech
  colour and the player-name highlighting down with it. A hidden tongue is one
  you cannot choose, not one nobody speaks. Names are resolved against the
  whole registry now.
  Which also fixes two things nobody had reported yet. The lookup was built
  on the first chat line of the session and never rebuilt, so a language you
  created mid-session, or Legendspeech being handed over at the end of a run,
  went unrecognised until the next reload. And the gradient below was being
  skipped if you had speech colour switched on as well as tag colour -- there
  are two routes through the painter and only one of them was checking.
- **"Tint speech" is now "Tint all speech".** Same setting, same default of
  off; only the label and the tooltips changed. The old name read as "tint the
  speech part of the line", which is the one thing it does not do -- with it on,
  a line in a tongue is painted end to end, tag and sentence together. Twice now
  that has been read as a colour fault by someone who had ticked it earlier and
  forgotten, so the word that was missing is *all*. The tooltips say which box
  does what: *Color tags* on its own paints the tag and nothing else, and this
  is what extends it to the words.
- **On a challenge run, the words you can read are lit up.** The first hours of
  a run are a wall of nonsense with no way to tell whether any of it is
  working. The words you *can* read are in there already -- a word comes
  through in the clear once your fluency covers it, same rule the game itself
  uses -- but they look like everything else, so the only feedback the run has
  to offer is invisible. They are now tinted, which turns the paragraph into
  the progress bar, in the place you are already looking. Quest text, gossip,
  the objective tracker, tooltips and NPC speech, all from the one place that
  decides a word is legible -- so the highlight can never disagree with it.
  In the tongue's own colour rather than a signal green. The palette already
  means something: a word you can read in Orcish comes up in the colour Orcish
  wears on every tag in the window, and it stays right when you recolour your
  palette.
  It fades as you learn, and is gone by the time half the page is legible. The
  highlight is a comparison -- these words, not those -- and a comparison stops
  saying anything once most of the line is on one side of it. Early on almost
  nothing is lit and every word of it is worth having; later it would be a page
  of coloured text, which is a page of plain text with extra steps.
  Only during a run. Off one, immersion is a setting you chose and you are
  reading at whatever fluency you have; on one it is a handicap with an end,
  and how close that end is is the thing you cannot otherwise see.
  A quest link's title is the one thing left alone. The label is a single span
  the client colours by quality, and a colour opened and closed inside it ends
  the link's own colour early, so the back half of the title would draw the
  wrong shade. It is still garbled, it is just not painted.
- **Legendspeech is written in its own colour, and it is a gradient.** Every
  other tongue gets one colour you can change; this one is gold running into
  ember across the letters of the tag, and it cannot be recoloured. It is the
  only language in the addon you have to earn, and a language nobody else can
  read ought to look like one rather than like another entry in the list.
- **Uninstalling the addon part-way through a run forfeits it.** Start a run
  at twenty, remove the addon, level to the cap in plain English with the
  quest log readable, put it back and collect Legendspeech -- that worked, and
  reaching the cap was being treated as a thing to pay out rather than a thing
  to ask about. A run writes down what level it last saw you at, so coming
  back several levels higher than that is levels gained without the handicap,
  whether the addon was uninstalled, switched off in the list, or erroring on
  load. The run is marked void, says so, and names the level it stopped being
  a run.
  One level is forgiven. The only honest gap is a ding that arrived in the
  instant of a disconnect, and a real absence is never one level -- getting
  the levels for free is the entire reason for doing it. Erring that way is
  deliberate: a run wrongly voided costs somebody days, and a run voided one
  level late costs nothing.
  Deleting the addon's saved variables does defeat it, and nothing is going to
  be done about that. It throws the run away along with the record of it, so
  there is nothing left to claim a reward with -- you are not at level
  fifty-nine of a Mythic run, you are not on one.
- **Settings moved to the panels they belong on.** The Languages tab is now
  *Languages & Fluency*, and it keeps the things that are about languages:
  which tongue you speak, how fluent you are in each one, and its color.
  Passive learning moved to the Language Trainer, next to the other way of
  earning fluency. Color tags, Tint speech and Tint in-game languages moved to
  Chat Channels, under *When you listen* -- a swatch on a language row picks
  which color a tongue gets, but whether any color reaches your chat window is
  a question about the window.
- **Removed: "Hide languages my race already speaks".** It was switched off by
  default in 0.5.5 because it read as the addon being broken, and full
  immersion now answers the question it was really asking -- properly, by
  changing what you understand rather than what you are shown. Nothing is
  hidden from the language list any more. The old setting is cleared out of
  your saved variables rather than left sitting in exported profiles.
- Tidied the settings panels: the small print under a control is grey
  everywhere now, instead of some of it being grey and some flat white.
- **The buttons are the game's buttons now.** Every button in the addon --
  the navigation list, Save, Import, Start, Abandon, the whole lot -- was a
  flat purple rectangle with a one-pixel edge. It read as a placeholder
  sitting on top of WoW rather than as part of it, and worse, it gave no
  answer at all to "is this thing clickable". They now wear the client's own
  button plate with gold lettering, press in when you click them, and go
  stone-grey with grey text when they are not available.
  Drawn from the game's art rather than by inheriting `UIPanelButtonTemplate`.
  The template has been rebuilt more than once across the flavours this ships
  to -- a nine-slice on retail, three loose textures on Classic Era -- so
  inheriting it would look right on one client and throw an error on another.
  The textures have been in the same place since vanilla and are the part
  that carries the look.
  Three pieces rather than one stretched image, because the caps carry the
  rivets and the bevel and stretching an eighty-pixel plate out to a hundred
  and seventy smears both.
  The small ones were caught too: the nudge and Remove and Browse buttons on
  every cast phrase row, Add and Restore above them, Learn all and Reset all
  on the language panel, and Guess, Reveal and New Word on the trainer. Four
  purple rectangles left on a screen of client art read as broken rather than
  as plain, so it was all of them or none.
  The small square ones -- reset, make fluent, the colour chip on every
  language row -- sit in the game's item-slot socket now, with the slot
  behind the icon and the metal frame around it. Thirty pixels rather than
  twenty-six, because a quarter of that width is the frame and at the
  smaller size the metal read as a dark outline rather than as a slot with
  something in it. The fluency bar beside them gives up the difference.
  The two icons are both halves of a ready check now. The yes was the ready
  check's tick and the no was the group-loot pass button: a bold red disc
  that fills its file edge to edge, next to a tick sitting in a third of
  padding. Drawn at the same size, the red one swallowed the socket it was
  meant to be sitting in and the pair read as two different kinds of
  control. Two halves of one set match by construction instead.
  And the sockets are no longer painted to match what the button does. A red
  metal frame beside a green one beside the plain one on the colour chip
  made three of the same control look like three different ones, and the
  game does not colour its slots either. What the button does is in the icon.
  Drawn at the button's own size rather than at the ratio the action bars
  use. Roughly a third of that texture is transparent padding, so an action
  bar draws it at 1.83x to put the metal where the button's edge is; copied
  onto a twenty-four pixel row button that makes a forty-four pixel frame
  reaching ten pixels onto each neighbour, and three controls in a row came
  out as a heap of overlapping squares. The padding is cropped off instead.
- **The floating language bar.** The in-character switch on it was two words
  of coloured text with a hover tint, which is not a button and did not look
  like one. It is a button now, on the same plate as everything else, still
  green in character and red out of it. The bar itself sits on the game's
  tooltip backing inside the game's tooltip border, instead of a flat fill
  behind a one-pixel line.
  The border is left the colour the game drew it. It carried the in-character
  state for a while, and tinting gold art a saturated green throws the art
  away and keeps the outline -- so a bar wearing the game's tooltip read as a
  green rectangle anyway, which was the whole thing it was supposed to stop
  looking like. The state is on the button, which says the word and is what
  you click to change it.
  The bar is larger than it was. That border is sixteen pixels of art on
  every side where the old one was a single line, and the spacing that used
  to leave a comfortable margin was putting the language name and the IC
  button underneath the frame. A bar you cannot read is worse than a plain
  one, so the bar grew rather than the border shrinking.
  Right-clicking it opens the language list with a radio circle beside every
  entry and the one you are speaking filled in, under a gold *Select Language*
  heading and inside the same tooltip border -- the way the game asks you to
  pick one of something. Before, it was a column of names with one of them
  coloured, which read as a list of commands rather than a choice.
- **The minimap icon and the floating bar are one switch.** They were two
  switches of different sizes for a release, and that was a mistake you could
  feel: the bar's button flipped speaking in character, the icon flipped
  everything, and the one setting they had in common was the one the bar had
  already turned off. So with the bar sitting on OOC you could right-click the
  icon and watch nothing move -- which reads as the icon not being clickable at
  all, and was reported as exactly that. Now either control flips the same
  thing and both faces change together, along with the icon's picture. The
  bar's button says ON and OFF rather than IC and OOC, because labelling the
  whole addon's switch with the name of one of the settings it turns off is how
  the confusion started. Your voice on its own is still a row on the bar's
  right-click menu, and still shift-click, which is the right depth for the
  narrower of two controls.
- **Right-clicking the minimap icon switches the whole addon off, and back on
  exactly as it was.** It used to toggle speaking in character, which is half
  of what the addon does to a session: with immersion on, the other half is
  that you cannot read quest text, the tracker, or anything an NPC says.
  Somebody following a dungeon's mechanics or walking a guildmate through a
  quest needs all of it off for two minutes, and a trip to the options panel
  every single time is the kind of friction that gets an addon uninstalled.
  So one click and the addon goes quiet -- speaking in character, full
  immersion, NPC speech, quest text, the tracker, the gossip list and quest
  learning. Click again and every one of them comes back the way you left it.
  What was on is written down rather than assumed: turning immersion *on* for
  somebody who never had it would be its own kind of wrong.
  On a challenge run it switches off what the run has not pinned and leaves
  the rest alone, because writing a setting the run holds down is what would
  void it -- a switch that can end sixty levels by accident is not a
  convenience. It refused outright for any run at first, which was too broad:
  Easy pins the written word and leaves your voice alone, so refusing there
  took away a working control for sixty levels to protect locks that had
  nothing to do with it. Only Mythic pins all of it, and on Mythic the switch
  says so rather than appearing to work and changing nothing.
- **Frames are the game's frames now, and the game draws them.** The bar, the
  language list, the standalone window and the confirmation box were all
  wearing a border this addon cut out of Blizzard's texture by hand. Correct
  art, arithmetic of our own -- and the arithmetic is what put the top and
  bottom edges on a line of their own, a pixel or two off the sides, which is
  exactly the sort of thing you notice without being able to say what is
  wrong with it. They hand the client a named backdrop now and let it place
  the pieces, so there are no numbers of ours left in it to get wrong.
- **Fixed: the question in a confirmation box ran through its own buttons.**
  It was four hundred and forty by a hundred and seventy whatever it was
  asked to say, with Start and Cancel a fixed distance off the bottom. The
  Mythic warning is four paragraphs, because it is four separate things you
  are agreeing to, so the two words you needed to read to answer were
  underneath the sentence telling you what you were answering. It is as tall
  as its text now, and no shorter than a dialog ought to look.
- **The Challenges panel** no longer stacks all three difficulties with a
  paragraph under each. It is a dropdown and one description, which is the
  shape of the decision: you are choosing between three, and reading three
  paragraphs of grey small print to make one choice -- then leaving two of
  them on screen afterwards saying nothing -- was noise.
  And the Start button greys out when you cannot start, rather than taking
  the click and answering with an error in chat. The crossed-out requirement
  above it has already given the reason.
  It scrolls now, like every other panel, and the description sizes itself
  to the tier you picked rather than to a fixed two lines. Hard's runs to
  six, and on a page that could not grow it was printed over by the
  requirements below it with the Start button pushed off the bottom of the
  window -- which looks like the button is missing rather than below.
  There is a **Stop the run** button on it now, behind a confirmation that
  says what it means: the run ends there, it cannot be resumed or restarted,
  and not on that character either, because the character has already spent
  the levels a run begins at. What you learned during it is yours whatever
  you do, and the dialog says so too -- the warning is about the run, not
  about the words.
  A challenge also needs a **genuinely fresh character** now, which means no
  experience earned rather than only the right level. The two refuse
  different people: the level turns away someone too far along, and the
  experience turns away someone still at the right level who has already
  played through half of it. A level nine who ran Exile's Reach is not fresh.
  **How fresh is fresh depends on which game you are playing.** Ten is a
  Retail number and only a Retail number -- it is where Exile's Reach puts
  you down, so below it is somebody who has done the tutorial and nothing
  else. Classic, Classic Era and Forever have no tutorial: a character who
  has not played is level one, and a level four there is somebody who went
  and did the first few quests in English before coming back to start
  properly. That is exactly who this requirement is for, and shipping the
  Retail number to all four clients was letting them in. The panel says
  whichever rule applies to the client you are on.
  **Hero classes cannot start one.** Death knights, demon hunters and evokers
  are handed the levels the run is about. A death knight arrives on Retail at
  level eight with an empty experience bar, which is a fresh character by
  every other test here and has still skipped the stretch of the game where
  you cannot read anybody -- which is the whole run. Refused by class rather
  than by the level they start at, since that level has been changed twice
  already. An allied race is still fine: it starts above level one, but it
  starts at the beginning.
  Hard now **takes the client's own help away** for the length of a run:
  the quest pins on your world map, the pins and the blue areas on your
  minimap, the floating names over every player and NPC, and the objective
  tracker on the side of your screen. Medium keeps all of it -- it garbles
  your objectives rather than hiding them, and an objective you cannot read
  is still an objective you can find.
  The tracker is hidden rather than garbled, because garbled it is still a
  list of counters and a number is a number in every language. It is put
  back when the run ends, and only if you had it open to begin with.
  Hiding it once is not enough -- the tracker puts itself back on screen
  every time your quests change -- so Glyphic listens for the events that
  change them and takes it away again. The first version of this hooked the
  tracker frame's own Show instead, which was tidier and wrong: hooking a
  method means writing to the frame's table, an insecure write to a
  Blizzard frame taints it, and the objective tracker is an Edit Mode
  system. Edit Mode walked its list of systems, touched the frame we had
  written on, and the tracker's next update died asking for an aura it was
  no longer trusted to read. Nothing of Glyphic's goes on Blizzard's frames
  now, and the tests check that rather than trusting it.
  The rest are console settings rather than the addon's own, so they cannot
  be refused the way a checkbox can -- they are set when the run starts, put
  back exactly as they were found when it ends, and set again if something
  changes them while it is going. Nameplates are deliberately left alone:
  they are how you tell what is hitting you, not a reading aid. The
  exclamation mark over a quest giver's head is left alone too, because it
  is a world object with no setting behind it, and there is no way for an
  addon to reach it.
  **A word costs more on the harder tiers.** Easy pays a whole word per
  quest, as it always has; Medium takes two hand-ins for one and Hard takes
  three. On the tiers where you can read the least, becoming able to read is
  meant to be the run rather than something that happens on the way through
  it.
  A hand-in that only got you part of the way says so. The toast comes up
  headed *Getting There* instead of *Word Learned!*, names the tongue and
  your count, and names no word -- because no word was finished, and naming
  one anyway would name the same word three times over and read as the addon
  repeating itself. The count is not rounded up either: a part-word shows as
  the words you actually have, so the hand-in that finishes one is the one
  where the number moves.
  Three rather than a larger number because the cost multiplies the tongue's
  own size. Orcish has a hundred words, so five would be five hundred quests
  in Orcish alone -- past hard and into a run nobody finishes. Three is three
  hundred, which is a levelling run.
- **The explanations on Languages & Fluency are behind an information icon.**
  Every switch on that page had a paragraph of grey small print under it, and
  six of them stacked meant reading a wall of text to reach the language list
  underneath. The text is all still there, on the game's own information icon
  beside each label, which is where Blizzard puts the same kind of thing. The
  page is about a third as tall.
  One line stayed on the page: the warning that you are out of character and
  none of it is reaching your chat. That is not an explanation of a control,
  it is the reason none of the controls are doing anything, and you need it
  without having to go looking.
- **Fixed: the text on the main panel ran underneath the buttons down its
  right-hand side.** The column and the prose beside it were positioned from
  two unrelated numbers and the numbers disagreed by sixteen pixels, so every
  wrapped line finished under the buttons. They are one number now.
- A **Profiles** button on the main panel's list. It had been reachable only
  through Blizzard's settings tree, which meant it did not exist at all in
  the addon's own standalone window. The list is also in the same order as
  the settings tree now, since the two are the same list.