As part of our special patch 2.2.0 event, we're reaching out to a number of the AddOn authors who have developed the AddOns we've all grown to love in World of Warcraft. Whether it's a Unit Frame, a bag mod, or a threat meter, you've probably used at least one of the AddOns these folks have developed. This particular interview is with kenco - the developer of KLHThreatMeter.
Curse: Could you tell us a little about your background in World of Warcraft and how you got into AddOn design?
kenco: My first toon was a Tauren warrior, which i started just a few weeks after release, and played for about a year and a half. When Blizzard released designated Oceanic servers i started a new toon: a Dwarf Priest. After a few months our MT quit suddenly and we were desparately short on tanks, so i swapped to a warrior and have been playing that toon ever since.
I didn't start making addons until after level 60. One of the earliest addons i downloaded was a Unit Frames mod, and at the time it was the most impressive mod imagineable to me. CTRA also made a strong impression on me, but it was only after i found WowWiki that i really became hooked, as it were.
Curse: What was the first AddOn you worked on for World of Warcraft?
kenco: The very first mod i made was to add timestamps to the chat frames. I cringe to recall the code i wrote then, but i'm still using an updated version today and loving the mm:ss.x timestamps. The first real addon was KTM though.
Curse: How has being an AddOn author changed the way you play World of Warcraft and how you interact with fellow players?
kenco: It has inflated my ego somewhat, but my guild mates are always ready to deflate it. Writing addons and KTM in particular meant i often spent hours dualboxing alone, and guildies were probably annoyed that i spent more time in Wailing Caverns than running 5-mans with them.
Curse: By the same token, has it changed your view of the work Blizzard has done with the game?
kenco: I knew Wow was an awesome game when i was levelling, but now i can honestly call it the best game i've every played. With the amazing API and scripting system, WoW has managed to combine two of my hobbies: gaming and programming, which is hard to top.
Curse: How badly did WoW 2.0 affect the AddOns you were working on at the time? Did it require you to re-design any of the core features?
kenco: I had a healbot style addon called KLHManaStorm that was pretty much killed by 2.0. It required minimal user input (press the button every second), had spell and target selection and was rather overpowered; it's no longer in development.
KLHPerformanceMonitor (an addon profiler) was broken after Blizzard-made frames became protected, because it was no longer possible to hook the event handlers for those frames. For a long time i thought it was gone for good, but with a bit more Lua experience and one crazy flash of insight i figured out how to fix it up and make it better than before. I'm quite happy with it at the moment because it can monitor user and blizzard addons without even having the CPU profiling feature enabled.
Curse: What lead to the creation of KLHThreatMeter? Was it a personal decision, or something you decided had to be done for more than just yourself?
kenco: Originally i had a strong interest in threat mechanics, particularly in finding out the underlieing formulas. I was inspired by another guy who had published some numbers for warrior abilities vs healing (unfortunately i can't remember his name but he deserves plenty of credit), but wanted to do some more rigorous testing. From that research i found the basics of healing threat, warrior stances, and aggro gain, but i only envisaged it being used for theorycrafting purposes.
A while later two things happened which lead to the first KTM. Firstly our guild was in real trouble on Vael and threat was the major issue (we were horde), so there was a strong motivation. Secondly i saw fragments of what was claimed to be a leaked threat addon from Nurfed on the WoW raids forum. I had a look at the code and got annoyed at it because they didn't have the defensive stance modifier right and their sunder value was way off, etc. But it was _a_ mod, which was enough for me to give a shot at it myself.
Curse: KLHThreatMeter is one of the all-time leading AddOns here on Curse, with over 4.5 million downloads. Looking back, are you surprised at its success?
kenco: Definitely, because for a long time KTM was only on the fringes and wasn't held in high regard. Then all of a sudden there was a massive increase in uptake and it became well known.
Curse: How much of KTM's success is attributed to user feedback, and is it sometimes overwhelming due to the number of players that use the AddOn?
kenco: When enough people are using the addon, you're bound to end up with a few extreme computer novices asking for help. After spending a couple of weeks diagnosing a problem for one user, we worked out that they had somehow extracted the zip file wihout any of the directory structure, just all in one folder. Then there are the comments like "KTM has an error" or "threat is wrong" which are frustrating as an author.
Apart from that, i often feel a pressure to keep the addon updated due to the large number of users. And if enough people heckle me, i'll usually add in a feature they want, with a few notable exceptions.
Curse: What do you see for the future of KTM? 2.4 promises a complete overhaul to the combat log and its parsing; is this something that excites you?
kenco: I would like to improve the nuts and bolts of threat handling for KTM. A lot of the basic stuff like handling set bonuses and talents is using old code which is hard to customise, and makes it a pain to add new items and mechanics. Eventually i'd like to have this core behaviour be completely specified by one data table, and have a simple interface that would allow uers to add new abilities, items, sets and talents, without any LUA knowledge.
While 2.4 promises something of a revolution, I can't see it happening any time soon, given the time 2.2 has taken, and the fact that new dungeons will be released in 2.3 and 2.4. I plan to have multi-target support ready for when 2.4 comes out. I suspect the new Threat API won't be useful for addon writers, because the new stuff they added to support Blizzard's scrolling combat text addon was so specific that you can't do anything with it. Chances are the API will return only very coarse values or be protected somehow.
Curse: Are there any other AddOns you're currently working on?
kenco: I have a couple of projects in the pipeline that i'm quite exited about. The first one is basically a damage meter but more. I have a new way of parsing the combat log that guarantees perfect parsing in any localisation (i.e. no ambiguous lines where you can't tell for sure which event has occurred), which is achieved by changing all the print format strings, then hooking every other frame so the other addons aren't aware of it. It records every event in the combat log as long as you are logged on, in a processing-friendly format that roughly looks like { action = "spell", ability = "Fireball", unit = "Illidan Stormrage", ... }. The next step is to support arbitrary filtering, aggregation and grouping functions to allow you to do a table of an any combat statistic you can imagine, like "show the meter for the parry rate of melee dps against the boss, or "who is taking the most hits from this specific boss ability" and other handy functions.
The other addon is for developers. The idea is to provide compiler and reflection services at runtime. You'll be able to view the source code for your addon at runtime, edit a particular file inside WoW, and reload the addon without actually reloading your UI. After that the sky is the limit: adding intellisense style support to the file editor, compile-time error checking, etc.
Curse: Looking forward, there's talk of 3.0 having a similar impact on AddOns as 2.0 did. Does this concern you at all and make you think twice when an idea for a cool new AddOn pops up in your head?
kenco: I can't see them adding any more restrictions that would break significant functionality. Before 2.0 came out we knew for a long time that Blizzard didn't like the state of e.g. decursive-style mods, and they were obviously overpowered, but there's nothing like that i'm aware of now.
Curse: If you could change one thing about the World of Warcraft API, and how it limits certain AddOn functionality, what would that be?
kenco: It would be awesome if they would enable GetPlayerMapPosition inside instances (it gives you infinite precision for any unit normally, but returns nil in an instance) - you could make powerful mods to create strategies for positioning fights... but it would be a bit overpowered, which is probably why they removed it in the first place.
I've heard that in 2.4 they will give you identifiable unit IDs for every combat log entry, which will allow some very powerful addon functionality to come in. Specifically, it will be possible to recreate a fight much more completely than now, which will be great for post-raid analysis.
Curse: Thanks for the interview, Kenco! Is there anything you'd like to say to your AddOn fans, or to Blizzard?
kenco: Keep up the good work Blizzard, and thanks to everyone for supporting my work!