Level up your Gameplay: WeakAura and Addons exclusive with Funki!
In recognition of addons and WeakAuras within the World of Warcraft. We have had the incredible opportunity to sit down for an exclusive interview with Funki, the mastermind behind some popular addons and WeakAuras in World of Warcraft. If you're a fan of POT BOT and DRINK BOT, or if you're looking to take your gameplay to the next level with some awesome WeakAuras, then you won't want to miss this interview!
Funki has been making waves in the gaming community with his innovative addons and creative approach to enhancing your gaming experience. In our interview, we'll be diving into his inspiration, creative process, and what's next on the horizon for him. We'll get an inside look at the world of addons and WeakAuras, and maybe even pick up some tips for leveling up our own gameplay.
When and what inspired you to start creating WeakAuras and addons?
‘‘All my projects began with either a problem I was experiencing, or one my friends were experiencing. There are plenty of creators who make things for other people as their primary goal. That’s not me—if it isn’t something I want to use (or a simple extension or adaptation of something I want to use), it’s probably not something I’d put significant time into. I’ve used and made simple WeakAuras for myself for years, but I only started making more complex WeakAuras during Shadowlands.
I do not have a background or any training in computer science or programming. But I’ve had a general interest in making things for a long time. During Covid, I got back into WoW after an extended hiatus. That’s when these two interests converged.
I think the first project I put real time into was a collection of WeakAuras for Balance Druids. While I usually play Resto, I was playing a lot of Balance in Season 1 of Shadowlands. I didn’t like any of the class WeakAura packs that I could find at the time, so I decided to make my own. In retrospect, this project had many problems, but I liked the layout of it way better than anything else I could find. I think a lot of class WeakAura packs are overloaded with things that aren’t very important at the expense of things that are important. That has gotten a lot better, in my opinion, over the last few years.
I no longer maintain that original project, and I instead use a pack from a streamer (who I don’t watch, but whose WeakAuras I like). If I made that same type of thing again, it would be quite a lot technically better than my last version, with the advancement of my skills and knowledge since then. But at this point, I don’t think I could make something better enough, compared to readily available packs (if better at all), to justify the time investment. But this was a great learning experience for me. ‘‘
Can you talk us through your process for creating a new WeakAura or addon from start to finish?
‘‘It varies quite a lot, but it usually starts with me being annoyed by something. Then I’ll usually look for addons or existing WeakAuras to solve that problem. If I don’t find a suitable solution (either nothing exists at all or I don’t like what does exist for one reason or another), I’ll usually think through what I want something to do—how it should function or look. From there, I’ll start considering the “how,” as in, what mechanisms might allow it to work the way I want. That usually involves considering or researching WoW API calls that return the information that I need. An API, or Application Programming Interface, is a set of rules and protocols that allow different software applications to communicate with each other by defining the methods and data they can use for interaction. WoW has a built-in API that WeakAuras and addons use to interact with the game client.
From there, I’ll start working on building the first draft. This is usually the most time-consuming part of the process. Once I have a draft that fundamentally works, I will focus on testing it as best I can. But the more complex the project is, the more I recognize that I won’t be able to adequately test it myself. So, provided I don’t think it will set anyone’s computer on fire, I’ll consider releasing a version to get some more users to tell me what doesn’t work and under what scenarios.
Then I’ll start working through any bugs that I find or that get reported.’’
How do you approach troubleshooting and fixing bugs in your creations?
‘‘Tracking down bugs can be frustrating, but they’re ultimately logic problems. The more information I’m able to collect, the more likely I can figure out what’s wrong. I essentially get to play detective—I take the clues I can collect from users and try to track down the root cause. It can be challenging, and it’s often frustrating, and I almost always feel like a dope at the end of the process, but it comes with the territory. I’d always prefer to know if there is a problem, so I’m always appreciative of people reporting bugs.
Early on, I started a discord server and set up a ticketing system to help make it easier to handle bug reports. Comments on Wago or Curse are inconvenient. Invariably, I need to ask questions to find out enough information to solve a problem. That’s impractical in a comments section. It’s also hard, as a user, to know what has and has not been reported already. With tickets in a Discord server, everything is public, and anyone can read any ticket and add to it. All the old tickets are also archived and remain public after they are resolved. I think this is better than having issues listed in different places.’’
Which resources or tools do you use to stay updated on new developments and techniques in Weakaura and addon creation?
“There are a few helpful websites and discord servers for understanding the WoW API and coding in Lua, the programming language that WoW Addons and WeakAuras use.“
Is the best resource to find information on the API itself. Note that there are a lot of iterations of Warcraft Wiki—the site has moved a few times, so when you google things, it’s common to get directed to old information on a previous version of the site.
It is a great discord for addon authors, with a friendly and helpful community. I’ve gotten a lot of great guidance from the folks there.
I find searching for API calls to be handy in this discord to see examples of how some things are implemented. The #snippets and #resources channels are also useful. I do not recommend asking for support there directly for projects made by other people.
Is a list of “Global Strings” that are helpful when trying to localize words and phrases for different game clients. More on this later.
A free app that is much better to code in than Notepad. I do most of my coding in this app—even for WeakAuras, since I can save my work more easily. Changes to your UI do not save until you reload your UI. So if your game crashes after you’ve been coding for a couple hours without a reload, you’re going to lose all that work. And UI reloads take a lot longer than Ctrl+S.
WeakAuras wiki, the best documentation available for how to use WeakAuras. There are some great resources here. I’d recommend reading the whole thing before you start writing custom code in WeakAuras.
Also, if there is something I’m trying to make that’s similar to something else that’s been published in some way, looking at the code for that project can be a big leg up. One example is trying to learn how to make a decent options menu for DrinkBot and PotBot, my two addons. While I didn’t know of any addons that had the functionality I needed, there were plenty of Addons with options menus that I could look at to better understand how they need to be structured to function correctly. I found an addon with a simple menu and used that code to learn how to make my own menus.
Can you share an example of a particularly challenging project you've worked on and how you overcame obstacles?
‘‘So this is a difficult one to answer. For me, every one of my projects is pretty much the hardest thing I’ve worked on. I’m very much a coding/Lua novice, even now. The limiting factor for whatever I’m working on is usually my skill level at the time. Everything I’ve ever gotten to work is a minor miracle. Every so often, I end up rewriting projects entirely as I learn new and better ways to do things. I rewrote PotBot, for example, this summer.
I originally wrote it as a simple addon that just created a macro with the highest rank of the Dragonflight main stat potion. It used a saved variable (which is saved on your computer) to store some other macro text also. But now it is much more complex and does a lot more, and it does everything completely differently. And it encodes all the data it needs in the macro itself, so it can be used on any computer. To say that was hard to pull off, at least for me, would be an understatement.
It also has a fully functional menu—the first complex menu I’ve made. I learned a ton when rewriting this one. I would not have been able to do anything close to this even a year ago.’’
How do you prioritize user feedback and feature requests when updating your creations?
‘‘It’s completely subjective. Since I’m ultimately making these projects for myself and letting other people use them, I only add things that I subjectively think would be useful. In general, I try to do easy things before hard things, since hard things can take a lot longer to pull off (if I can pull them off at all).”
What do you think sets your WeakAuras and addons apart from others in the community?
‘‘There are a lot of incredible addon authors out there—many who are far more talented and knowledgeable than I am. WoW has an amazing community of creators and fans—its one of the best things about the game.
The things I make tend to be niche (at least at first) and focus on making my life easier doing the kinds of content I like to do. I’m taking this tier off from raiding seriously, but I raided at the Cutting Edge level every tier of Dragonflight, and I play healers almost exclusively. So almost everything I do has that slant on it.
I also try not to fall into some traps I see some addon authors fall into with menus. When I look at some of the more complex addons, their menus are so overwhelming that it can be hard for the average player to use them. I put a lot of effort into keeping the menus laid out well so they’re not overly confusing. It helps that the things I make tend to be comparatively simple, but since it’s an issue I recognize in the greater Addon space, it’s something I try to consider whenever I’m making any kind of UI element.
I also try to remember that a lot of people play this game. They play differently and have different goals and interests. The way something works best for me may not be the way it would work best for someone else. So I try to provide as many options as possible so that everyone can customize my projects to work best for them. I don’t like making decisions for other people—I prefer when my projects make it easy for people to make decisions themselves. An example of this is with my Clickable Raid Buff WeakAura. I’ve gotten lots of feedback for, for example, Rogue poisons, that there are “right answers” and “wrong answers,” with requests to automatically disable some of them for certain specs because they’re not the recommended choices. I eschew doing that because it’s not for me to say what is right in every scenario. Maybe that’s correct for raiding, but how about Mythic Plus? How about PvP? How about for casual open world content? How about for that once-a-tier fight where the right answer is to do something a little weird? I don’t know if there is one right answer for every scenario, and frankly, I don’t want to keep up on that for every spell or item. So I leave the decision-making to the players using my projects.’’
How do you ensure compatibility with different game versions and other addons?
‘‘There are a few techniques I’ve used for this purpose. It depends on what I need to localize. Localizing code means adapting software to work in different languages, regions, or cultures by customizing elements like text, formatting, and data to meet the specific requirements of the target audience. For example, most WeakAuras that relate to spells or items can be localized simply by using spell or item IDs instead of spell or item names. Those are the same across every game client. But some API calls return only English or only localized information, which can be tough to work with if I’m trying to match a return to a specific value. To accomplish that, I sometimes need to include a localization table of some sort with different values depending on the client. The code then looks up different values for those items depending on the language of the client on which it is running. That’s a struggle for me because I only speak English, and I don’t have access to other language game clients to even test on. When that comes up, I usually lean on the users for help. I know from the hits on my website that my audience is global. So I do want to make everything work across every client, but that’s not always possible without some major help. For example, the way my DrinkBot addon works now is by reading the tooltips of the items in your bags. It looks for certain words and information to identify if the item is a drink or food to be included in the Addon’s macros. The words it needs to look for are different on different clients, so right now, it only works reliably on the enUS client. That is something I want to improve in a future update, but it’s not something I can do without help.
Localizing these things takes quite a lot of time and effort, and it's impossible for me to test any of it meaningfully, which poses a real challenge.
I sometimes also use global strings for things. These are words or phrases that are already translated by Blizzard in the game code. For example, let’s say I need something to reference the month “January.” Rather than hard-code the word “January,” I can use `MONTH_JANUARY` in my code, which Blizzard has already translated to the language of every game client. So on the esES client (Spanish language), it returns “enero” and on the ruRU (Russian language), it returns “Январь.” This only works for words and phrases that have been localized by Blizzard, so it is far from all inclusive, but it’s still handy.
And the final way I try to account for language issues is by often including the ability to edit, as a custom option, the text of alerts. Sometimes these other methods are not practical for one reason or another, and simply allowing a user to type in the words they want to see is a reasonable alternative when that’s possible.
As far as compatibility with other Addons, I do not think I have published anything that really required inter-Addon compatibility checks.’’
What advice would you give to aspiring WeakAura and addon creators?
‘‘Stop aspiring and start doing. The only way to learn this stuff is by doing it. I didn’t have a clue what I was doing when I started, and I just kind of figured it out as I went along. The things I made were all, probably, pretty rough or “hacky” (and some still are—I’m by no means a pro). But if you don’t start learning, you’ll never get good at anything. That’s really advice for life. Get out of your own way. Accept that you’re not going to be a pro on day one and try to make cool things that you’d like to use. Sure, you might fail at it. But failing is only really failing if you don’t learn anything. Ask for help from people who know better than you. Try to put some real effort into the questions you ask so that the answers are helpful. If you’re struggling with something in Lua, google can help you figure out how something should look. Look for examples—there are usually many to review. ChatGPT is also a solid tool to get you started and to check syntax errors.’’
Can you discuss any future projects or ideas you have for expanding your creations in the future?
‘‘Right now, I’m focusing on improving my current projects more than anything else. I’m always looking for better ways to do things. Often getting something to work correctly, as in getting it to do the thing I want it to do, doesn’t mean that it does that thing efficiently. So I’m working to improve the efficiency for my two most popular projects, Clickable Raid Buffs and Temporary Enchants and DrinkBot. I have a good idea for how I want them to work, but it’s much easier said than done. And this is a hobby for me, not my full-time job. So my time is limited. It’s slow, but hopefully it will bear fruit soon. ‘