< back to homepage

Microblog & News

tylxr's microblog and news site. Stay updated with the latest posts on web development, tech insights, and personal projects.

RSS Feed | View all posts

Annoying guildmates is a time-honored tradition. The same for butchering your game's UI. Let's do both!

Details!, for the uninitiated, is a World of Warcraft addon that tracks damage, healing, and other combat-related statistics. It's one of the most popular addons for the game being used by, essentially, every player.

Details! also has a lot of great customization features, namely, the ability to set a nickname that is displayed in lieu of your character name. This is a great feature for guilds where people have multiple characters — you may not recognize Bob's third Rogue name but you'll definitely recognize his Discord name.

But, obviously, there are some safeguards in place, right? Right?

In it's in-game UI, Details! does add some constraints to the nickname field. Standard stuff, there's a maximum length (depending on language), enforces proper capitalization, escapes special characters, etc. However because of constraints put in place by Blizzard, all stored data for addons, the nickname field is stored in plaintext. This field is almost devoid of any sanitization and only has a limit of 20 characters.

So, what can we do?

Well, we can do some cool stuff! The obvious options are to bypass some of the text formatting. You can set your name to all lowercase, add special characters, or use any extended characters from the font file used by Details!, Accidental Presidency. But that's boring.

If we look into some of the features afforded to addon creators, we can inject some UI escape sequences into the nickname field. These sequences are used to change the color of text, add icons, and even add textures to the UI. The sequences are not sanitized and are rendered in the UI, so we can use them to add some flair to our name.

Colors are pretty easy - The format is |cAARRGGBB where AA is the alpha channel, RR is the red channel, GG is the green channel, and BB is the blue channel. The alpha channel is optional. You can also use |r to reset the color to the default. Textures can be loaded with |T123456:n|t where 123456 is the ID of the texture file and n is the display size of the texture. 16 fits in the row of Details! but you can go bigger. You can find a list of available textures on wowdev/wow-listfile

So how do we do it?

The easiest way to get this up and running is to:

  1. Set your nickname to something unique, like Searchforme, in the Details! UI.
  2. Logout of the game
  3. Open the Details.lua file in the SavedVariables folder - Example: C:\Program Files (x86)\World of Warcraft\_retail_\WTF\Account\12345678#1\WowRealm\YourCharacter\SavedVariables
  4. Search for the nickname set above
  5. Replace the nickname with the escape sequences you want to use - Example: |cFFFF6188tylxr!|r or |T4034240:16|t
  6. Save the file
  7. Log back into the game

Some thoughts:

I did experiment with modifying the NickTag function in Details!'s code. While it is possible to remove some restrictions, it's not worth it and there are still restrictions in place on other installations of Details!. Your fancy name is still hardcapped at 20 characters which severely limits some cool things you can do.

It's also worth noting that nicknames, by design, are only shown to guildmates. If you're grouped with non-guildmates, your nickname does not get shown to them. This is probably a good thing.

I don't believe there to be any security implications with this. The nickname field is rendered strictly as a string and stored as text. Furthermore, the character limit is so low, that I would be surprised if you could do anything malicious with it and being limited to displaying to guildmates creates a smaller attack surface.

Have fun being a nuisance!

-tylxr