Blakerspace

B

I learnt to code on World of Warcraft private servers

When I was 13 years old I wanted to play World of Warcraft, but my parents wouldn’t let me buy a subscription.

Because of that, today, I write software for a living.

Pretty much my entire high school life, after school, was spent on the computer, fixing a bootleg free version of World of Warcraft. This is how I learnt to code! I’ve told some close friends bits and pieces of this story and it has been met with demand for more detail, so I’m taking that as an excuse to write it all down.

The year is 2006

I’m 13 years old. After settling in with my group of nerd friends and trying way too hard to be cool, they started talking about a new game that had recently come out: World of Warcraft. This game was an MMORPG, something I’d never heard of before. An online game? With other players, adventuring in an intricately detailed world together? In amazing 3D graphics?

We talked about this game all day when we could. What class would your character be? What race? I was going to be a Tauren Hunter. Named Konkor. Hunters had pets; what pet would you choose? Turtles were strong and resilient, I liked the idea of reigning death from afar while my trusty turtle took the hits. Or maybe a ferocious tiger could be cool too… There was a dizzying array of character customisation options that we could imagine and plan out before even getting close to installing the game.

After fantasising to the point of determining the style of the horns of my to-be Tauren Hunter, I decided I just had to play this game. I came home from school and told my parents I was going to get it, and asked if I could install it on the computer.

What Konkor would look like

What Konkor would look like

“Sure,” said Mum. “How much is it? Can you save up for it?”

“It’s $40, and $20 a month subscription after that, so I’d have to save really hard and maybe use some savings but I can afford it for sure.”

<Narrator: he could not afford it.>

Mum: “Paying money per month? That’s ridiculous! You can’t afford that with the pocket money we give you; and don’t even think about getting a job - you need to focus on school. Forget it.”

Forget it.

I’ll never forget that. After having what was essentially a big ol’ tantrum for a 13 year old, the next day I was more determined than ever to make Konkor a reality… well, as real as a digital gun-wielding cow could be.

Free World of Warcraft

There was only one obstacle in the way: cost. How can I play WoW for free? Cue many hours of Googling. I tried many methods. At first I thought I could play a character on a friend’s account, but we both couldn’t be logged in at the same time. I tried some unscrupulous methods. The least unscrupulous of which (which I ended up sticking with for quite a while) was private servers.

Unscrupulous methods

The first thing I tried to do was to get access to real World of Warcraft account by scamming people. I don’t know why this was the first thing I turned to. I think if my mum knew this is what I was going to do when she wouldn’t let me play, she might’ve changed her mind. Regardless, before finding out about private servers, I briefly entered the world of WoW account scamming.

Quick reminder that I was just a boy, not an experienced scam artist skilled at tricking people into giving me their WoW accounts. I literally found a post on some scamming forum that explained various scamming methods step by step. Many of the successful scams involved swindling people who were looking to sell or trade their WoW accounts.

Selling your WoW account is against the Blizzard terms of service; there was no clean or official way to exchange accounts with someone. The only way to sell your WoW account involved advertising on dodgy forums dedicated to trading accounts on the down-low. This was ripe for scamming because these transactions are anonymous and done exclusively over the internet.

Consider buying a soft serve at McDonald’s. You walk up and ask for your ice cream. “That’ll be 50 cents,” the cashier says, as the amount appears on the register in front of you.

50 cents well spent

50 cents well spent

You reach for your pocket to withdraw 50 cents, but consider this. What if you give them the 50 cents and they just walk away? Sure, it’s just 50 cents but pretend it means a lot. There’s actually no guarantee that you’ll get ice cream after you hand over that 50 cents. If you ask the cashier for the ice cream first, they are presented with the same dilemma. There’s a chance you, the customer, will just take the ice cream without handing over the 50 cents. What’s the solution to this absolute banger of a conundrum?

This obviously isn’t a problem. You pretty much always give the money first and trust that McDonald’s are going to give you your ice cream. That’s because McDonald’s has a good reputation and has completed millions of transactions smoothly without them running away with your money.

That trust doesn’t exist in the World of Warcraft account trading world. Someone always has to “go first” and risk losing everything.

Sidenote: One way to solve the conundrum could be to find someone both you and the cashier trust to use as a middle-person. The middle-person is given both the ice cream and the money, and performs the exchange. The middle-person could of course just run away with both things but the idea is that both people trust them – they have lots of verified transactions, or might be an admin or otherwise position of trust on the dodgy forums.

These did exist in the account trading world, but were unpopular.

Trusted middle-people would often charge a fee for their services if in demand by a lot of people. In addition to their fees though, these people are hard to find, and this makes using a middle-person an unattractive option.

Usually the person with the lowest reputation went first. Reputation was built by successful trades. Traders had “rep threads” where people who they’ve successfully traded with leave feedback like “good trader A+++”, just like on eBay. Other things like being a moderator on the scamming forum also improved your reputation too, but it was mostly just based on the number of positive eBay-style feedback posts you had in your rep thread.

As a scammer on the hunt for a World of Warcarft account, you basically want the seller to go first so you can take their account and then run away. This means you need more rep than people you are trying to trade.

An interesting method going around at the time though was impersonation, and as dodgy as it was, it was a pretty smart way to solve the problem.

Going back to the soft serve analogy, how it works is that I, the scammer, make a shop called “MacDonald’s” to trick people and make them think I’m the real McDonald’s. Then I go and search for people who want to buy soft serves. I find someone and say “Hey since I’m McDonald’s, and have lots of reputation, you have to give me your 50 cents before I give you the soft serve,” and the customer thinks nothing of it and hands over the 50 cents.

Joke’s on them! I’m not the trustworthy McDonald’s, I’m the unscrupulous MacDonald’s, so I just run away with their 50 cents and the customer is robbed.

That’s exactly what I did to scam my first (and only) WoW account; I impersonated a moderator on the scamming forum and did a trade.

After finding out they were scammed, the account seller said that the account he was selling was his friend’s account who had just died in a car accident, and I should feel bad, and that he had opened a case with the FBI about the incident. Looking back this is clearly all made up in an attempt to make me feel bad and give the account back, but it scared the crap out of me when I was 14 and so that was the end of that.

My search for free access to World of Warcraft through scamming ended there, and I went back to the much less adrenaline-filled world of private servers instead.

World of Warcraft private servers

The way that private servers worked was simple at a high level. Instead of the World of Warcraft game connecting to the official™ Blizzard-owned-and-operated servers, you’d tell the game to connect to some other game server that someone else ran. This “other server” is the private server, or emulated server. It’s called an emulated server because some smart people worked out how WoW talks and listens to the real Blizzard servers, and these servers emulate that communication.

I didn’t understand any of that at the time. All I knew was that this was a way to play WoW for free: you didn’t need to pay to connect to a private server. Some people ran them in exchange for donations from other generous players, some people ran them just to mess around in the game, and some people just wanted to experience the content for free. In any case, I started the hunt for a private server that I could join.

Back then, unbeknownst to me, WoW private servers were very poor imitations of the real product. This is because Blizzard is a big company that hires hundreds of engineers to build the real server software (and they get paid to do it) while private servers are usually developed by a few passionate individuals who are almost always unpaid, and often not qualified software engineers. The private servers of 2006 could support 20 people at most (to put this into perspective, even in 2006, Blizzard servers had thousands playing simultaneously).

After some hours of Googling I found a “WoW private server list”. Server owners could advertise their server on the list, and others could consult the list to find one to join. After finding one which seemed to have an impressive 80% uptime, and a massive 15 users online on average, I decided that this was the server for me.

The next step after finding the server now was actually obtaining the game so I could play it. These days it’s extremely easy to go and download World of Warcraft. However, this was Australia in 2006. I think I might have just switched to broadband with extremely limited bandwidth limits (our first plan was 200MB a month). There was no way that I was going to be downloading the multi-gigabyte World of Warcraft.

I had to borrow the discs from my friends at school. And even then, the game alone wasn’t enough. You had to patch your game to exactly the version that the private server you wanted to connect to said it supported. This was again before the days of auto-patchers, you had to download a separate “patch updater” program for every version update you wanted to perform.

POV: you just got home from school with your trusty USB

POV: you just got home from school with your trusty USB

The WoW game off the discs came at version 1.0 – no patches. The server I wanted to play was at version 1.9.4. So I had to get the 1.9.0 “major patch” updater, then 1.9.0 -> 1.9.1; 1.9.1 -> 1.9.2, etc. all the way up to 1.9.4 (for my birthday, I got a massive 1gb USB drive that I used for all this stuff. It cost over $80 I think). Luckily the minor patches were quite small so I was able to download them, but the major patches had to be downloaded at school and put onto my trusty USB drive. I remember hanging around at the end of many computer classes trying to low-key finish downloading and transferring WoW patches. It was a big deal, so to make sure I never had to do it again, I kept every patch I ever downloaded on my computer. This ended up being very useful, because you couldn’t go backwards in your game version. If you updated to 1.9.4 but the private server was version 1.9.2, you had to uninstall the game and start again.

At this point, I’ve come home from school and finally patched up my game. I edited the configuration file to make WoW connect to the private server I’d found on the list. I opened the game. I watched the opening cinematic… for the millionth time, I’d of course already watched it many times at school on the World of Warcraft website. I put in the details I’d registered on the dodgy private server site and… Disconnected from server.

Try again… Disconnected from server.

So much for 80% uptime.

I tried maybe 10 more servers from the list before I finally connected to one. But then HOLY MOLY. I’M IN THE CHARACTER CREATION SCREEN. I pick Tauren. I pick Hunter. I pick the best horn style. I enter the name Konkor… and I press Enter World.

Let me tell you, watching the Tauren opening cinematic is something I’ll never forget. I wasn’t expecting it – I knew about the main cinematic when you load the game for the first time, but I didn’t realise there was a specific one for each character race. It takes you on a fly-through of Mulgore, the wide green plains that the Tauren call home, with a smooth-voiced narrator explaining the background story of your character’s people. I was finally in, and it was incredible.

A buggy reality

I spent 10 minutes on my Tauren killing bugged, infinitely-respawning wolves with my level 1 axe until I got tired of it and decided to head to bed. For the next couple of weeks I kept revisiting my Tauren friend, managing to quest my way through the starter zone. It wasn’t particularly smooth sailing, though. I had to skip a lot because of bugs in the private servers. Any quest beyond a simple “gather x items” or “kill x boars” rarely worked. As a result, I had to level by killing a lot of wolves instead. One wolf genocide later, and I had made it all the way to level 10, which made me capable of taming my long awaited turtle pet.

Of course, you don’t simply get a turtle at level 10. This is World of Warcraft in 2006, you bet your ass you had to do some elaborate series of quests to actually earn that after reaching level 10. And of course, the quests just didn’t work. I looked around for some answers, but most online resources were for the official game where these problems didn’t exist. After finally working out the issue – that simply no-one had properly programmed in the Hunter pet quests on this server – I logged off and searched for another.

That was the last of Konkor.

Side adventure: Becoming a Bear in Canada

(Note: this is just a fun side story highlighting the whacky adventures you could get up to in private servers back in the day. If you’re not interested in the World of Warcraft stories, you probably won’t care about this part. Feel free to skip.)

The next server I settled on was some Canadian server. It was surprisingly usually online after I came home from school, so I played it quite a bit, and made friends with some of the 20 or so other inhabitants. This time I played a Druid so I could avoid the Hunter pet quest catastrophe from happening again. I made it to level 10 a bit more smoothly on this server and came across yet another important quest that was bugged; the quest that allowed my character to be able to transform into a bear. The quest needed you to place an item somewhere which summoned some bird thing that you had to kill to get a special feather. Again, it was a case of no-one having gotten around to programming the quest.

Devastated once more, I gave up on the bear dream and tried to continue on as a plain old Druid.

Until one day, while I was back at a major city restocking my supplies, I saw a different Druid in bear form running around. I immediately asked them how on earth they got around the bugged quest.

“The feathers that drop [from that bird thing you need to kill] also drop from the owls in the level 50 zone on the other side of the map.”

I was a newbie level 12 Druid, going anywhere near that level 50 zone would be not only instant death, but a very long walk away for sure. But maybe these adventurers could help me, seeing as clearly this bear had done it before?

“Can you help me get a feather?” I asked the bear.

After some brief discussion, the bear and his friend agreed to run me across the world through the high level areas to reach these owls. These high level areas were filled with hostile monsters that would attack you on sight – and since my character was so low level I would easily die in one or two hits.

To this day, I think this experience was probably one of the most memorable and adventure-like gaming experiences I’ve ever had. We spent hours simply running across the huge game world, while I died dozens of times along the way, just to make it to this level 50 area. The final part was the toughest. It was a long, claustrophobic tunnel filled with aggressive high level monsters that stretched for miles: the final barrier to my feathery freedom. Each death put my ghost back at the start of the tunnel, where I’d have to run all the way through again to my corpse where I’d resurrect – and die again almost immediately – but hopefully gain some valuable yardage if my higher level companions could keep the enemies off me long enough.

Step by step we eventually made it through that damn tunnel. We killed an owl, got the feather, and were the only two Druids with bear form ever on the server.

I hopped around for a while longer playing “Blizz-like” private servers. Instead of searching by uptime and capacity, I started searching for servers that had the most stuff working. This was hard to do. Servers often advertised how good they were by what percentage of spells worked. This was a useless metric because most servers advertised 90%+ spells working, and spells were only a small portion of the game experience.

What ended up being more useful was knowing what kind of emulator their server was based on. Names like WoWCraft and WoW-D were thrown around. I don’t remember much about emulators in these early days, but I do know that servers were run off one of a small set of emulators, which were then extended or customised by the operators. It became easy to get a quick understanding of what the server had working based on what its emulator was, since that had the most impact on the amount of features that were available.

The amount of extending and customising that server operators could do was pretty limited. Most frequently seen were things like xp boosts (“200% blizzlike” meant double the normal xp rate, some went up to 5000% to trivialise the levelling grind), and custom vendors that sold simple custom items. These usually ruined the game because server operators had no idea how to make balanced items, but that’s not important. The only way these private servers differed from the official ones was xp rate, crappy items, and broken quests.

However, that changed pretty soon.

Sidenote: You can read a more detailed history of private server emulator evolution if you want in this archive of an old emulation site.

A new era of emulation

Rumours started spreading of one of the old time developers building a new emulator. This one was going to be written in C++ (so you knew it was going to be blazing fast!), support hundreds of people playing simultaneously, and have all spells working. It was called the Antrix project. I remember reading about it but promptly forgot about it, because it seemed too good to be true. Some months later it was released, and people started playing on it. And it was good. The promises were not empty. It was blazing fast. It was more stable, so servers started generally having better uptime. And of course, the quality of the emulation was higher, meaning overall more stuff worked on private servers.

Over a year or two the project only got better. Well, not the Antrix project as we knew it. You see, the WoW emulation scene was not a stable one as it was pretty much run by children. There were lots of arguments, team break-ups, source code leaks, and project forks. Antrix became Ascent which became ArcEmu, and more. It was a complicated taxonomy and I can’t explain it all. The important part is, the year is now 2007 or 2008 – some months after Antrix came out – and now ArcEmu is the most popular server emulator, derived from Antrix.

Surprisingly, the ArcEmu project still exists on Github.

Surprisingly, the ArcEmu project still exists on Github.

ArcEmu had all the most common spells working, and a whole bunch of (relatively) complicated quests working too. This was largely due to the fact that ArcEmu provided a nice and simple way of creating quests and other content through scripting. Scripting allowed you to write simple Lua code that the emulator would interpret and put into the game. With Lua scripting available, it became very easy to make stuff like that hunter quest work. The only way to create complex content up til this point was writing it in C++ and compiling it into the emulator directly. To do that you needed to learn some C++, how to compile the emulator, and recompile/restart your server for every change you made.

Comparatively, Lua scripting is very easy to learn. It’s a simpler language. You never had to recompile the emulator, and sometimes not even restart the server, to get your scripts in-game.

At this point, because so many more people could meaningfully contribute, blizzlike servers became pretty good. People were satisfied, and getting a bit bored with the norm. A new trend appeared: making custom content inside the WoW universe.

This rise of custom content: WoW-V.com

Making custom content was easier than it had ever been, but it was still complicated. Making new items and creatures required you to edit a database. This was tricky because it involved knowing a lot of magic numbers and SQL, a special language specifically for editing databases. To make this easier, WoW-V was created. WoW-V was a website that provided a nice web interface to create custom items and creatures. It evolved to also become a platform for sharing and discussing custom content in general. It became a home for scripting discussion. I spent a lot of time on this site originally making some simple custom items, but I was eventually drawn to the scripting forum.

My only screenshot of WoW-V.com, where I&rsquo;m roasting another member for not being in the top creators on the homepage. The open MSN Messenger windows date the image accurately.

My only screenshot of WoW-V.com, where I’m roasting another member for not being in the top creators on the homepage. The open MSN Messenger windows date the image accurately.

In the scripting forum, users would make “release” threads showing off their custom boss creatures. I can’t remember exactly what got me started with scripting but I think it was after seeing a few of these I decided to give it a shot myself.

I was able to piece together a few simple bosses and vendors based mostly on copy and paste programming . They were nothing special, were written with bad programming practices and style, all built in notepad.exe… But hey, making stuff using World of Warcraft as a sandbox was really cool.

Compared to more traditional ways programming is taught, I think this is simply mind-blowing in comparison. Programming is practical, and being able to write stuff and physically see it in a game world is a really rewarding experience. Many programming tutorials teach theory, which lead to practical exercises which are usually text-based trivial toy programs that don’t really inspire much further learning.

Designing a boss creature is much more inspiring and makes you want to learn more. You have a cool idea – I want this boss to cast a spell on all nearby players. How do you do that? Next minute you’ve found an example and copy-pasted your way into learning for-loops.

One of the custom bosses I made, recorded in 360p. I was too scared that I would get in trouble for putting my custom WoW bosses on YouTube, so my fearless highschool friend uploaded it to their channel instead. <a href="https://www.youtube.com/watch?v=Mae2cv-J7d4">The full video is still available</a>.

One of the custom bosses I made, recorded in 360p. I was too scared that I would get in trouble for putting my custom WoW bosses on YouTube, so my fearless highschool friend uploaded it to their channel instead. The full video is still available.

After making some bosses, I learnt the common patterns and a bit more about Lua. I also started to understand some of the common mistakes that I saw in the releases, and eventually learnt some of the more difficult parts of Lua scripting. I would occasionally post in the WoW-V scripting forum answering questions or helping fix problems other people got stuck on, and became a bit of a regular. Soon, I decided to write a tutorial on one of the intermediate parts of Lua, tables, which is basically a way of storing a collection of related values, like a list of spells for a monster to cast. They do a bunch of other things as well, but the important thing is that using tables allows you to remove a lot of repetition from a standard cast-a-few-spells boss script and make them a lot more concise and quicker to write.

That first tutorial was honestly utter garbage. I did exactly what every other tutorial did and explained the theory without very useful examples. It was very text heavy and didn’t have any images or helpful ways for people to grasp the concept. Nevertheless, people were very kind and replied to the thread saying how useful it was. But then I’d receive the private messages from those same people, asking some more simple questions about it and admitting that they feel dumb for not understanding the tutorial.

What the heck? I’d just made people feel dumb because of the content I’d produced. That made me feel really bad and was absolutely not on. I helped everyone who messaged me privately individually and then re-wrote the guide based on the feedback.

The new guide was much better than the first one. Those same people replied to the new thread saying they learnt a lot more, and I didn’t receive any embarrassed private messages afterwards. One particular quote stuck with me, “I learnt more from reading this guide than staring at pixels for hours” – my last guide may as well have been a collection of random pixels! This was definitely an eye-opening experience for me, but after seeing a good end result, I continued trying my best to write useful tutorials and guides as I learnt more scripting.

A buggy reality, Part II

The Lua scripting was great, and it was a very practical way to learn programming by example. It wasn’t always that simple though. Sometimes there were things you wanted to do that were actually impossible due to limitations of the “Lua engine” - the piece of code that took Lua scripts and turned them into actions performed by the C++ core.

What I mean by that is, say you have an idea – you want to make an item that tracks and displays the name of all the players you defeat during player vs. player combat. There was no way to track when a player died through scripting, making this idea impossible to achieve. Additionally, some commands were broken or didn’t work correctly. For example, the command to cast a spell on a target creature didn’t work correctly, which was a very commonly used command and fairly frustrating for most scripters.

Eventually I, too, ran into a buggy scripting command that I could not work around that blocked work on one of my projects.

Side adventure: The project that started it all

The project that I wanted to do was probably the nerdiest thing I’ve ever done to this day, and that was to try and bring the Yugioh duel monsters card game to World of Warcraft. Unbeknownst to me, the Yugioh card game is actually really complicated to program – there are many kinds of cards, spells that can chain together, all with different priorities; the opponent can perform actions during the other player’s turn, and worst of all any particular card could violate any of the many rules of the game depending on the card text. However, I foolishly didn’t think about any of the complicated intricacies. I just wanted to turn the World of Warcraft arena into a duel monsters field and have big-ass monsters fight each other like they do on the show.

While I worked a lot on the project and wrote a lot of code, I never really got close to completing the full ruleset from the show. I focussed on the wrong things first instead of starting with a minimal foundation and building up from there. For example, the duel arena had an elaborate spectating system that automatically seated spectators around the arena, but you couldn’t cast Quick-play spells. Thinking about it now, it’s a mistake many still make professionally; and perhaps why the MVP is so revered in the tech community today.

Anyway, by the end of the project, you could do the following things:

  • Challenge a player to a duel
  • Spectate a duel in-progress in the arena
  • Sacrifice, summon, and fight with basic monsters just like in the show
  • Play Field spell cards (depicted below)

Additionally, there was plenty of infrastructure for server owners to make their own cards. There was a mini-engine written in Lua that allowed developers to write custom behaviour for their monsters to create custom effects, complex summoning conditions, and more.

Here are some screenshots of what it looked like. Note, I didn’t actually make these field effects or the duel podiums; another talented and much more creative community member kindly made these for me.

Your deck in the WoW duel monsters game was determined by the cards you had in your player’s inventory. The command that was broken that blocked development on this was the very simple command to get an item’s ID that’s in your bags. If I didn’t know the items that were in your bags, there was no way to know what cards you could play, so I was officially stumped. That’s when I decided to look into why this command was actually broken.

In the end, I was diverted from this project for over 2 years building the Lua engine and school and stuff, but once I finally came back to it, getting the IDs of the items in your bag was the smallest of my problems. Almost everything else that I wanted to achieve in the Yugioh-WoW duel game was impossible with the Lua engine in the state it was when I first attempted to do the project. And although I never got to finish it, making solid progress after 2 years of investing in the platform to build it was extremely satisfying.

I really wanted to do this project, so I decided to dig deeper into the Lua engine to see if I could fix it. This involved downloading all the code of the private server emulator, setting up my computer to be able to read and compile that code, and so on. But once that was done I was able to use the power of copy and paste programming once again to fix the problem with the command I needed and continue the project.

I didn’t end up continuing the project, though. After I fixed that first command, I found a couple more easily-fixed problematic commands here and there. I even managed to fix casting a spell on a target. These were NOT mind-blowing fixes mind you – most of them were just typos or something that no-one had gotten around to fixing because no-one really looked after the Lua engine code.

After fixing those bugs, I dug around in the emulator source code to see what else was possible, looking for things that might help achieve the previously “impossible” things in the Lua scripting world. And there was a lot. With some more copy-paste programming I slowly added more and more commands to the Lua engine based on all the new stuff that I’d found in the emulator code. Again – this was very simple stuff, usually just copy pasting a similar block of code and changing a couple of things. But there was so much new potential here – now, I could change the weather from my Lua scripts! I could track when players were killed! A million new ideas formed, and I knew the scripting community would think of even more. I’ll be honest, I also wanted to share and show off what I’d built. For these reasons, I decided to get my changes out there in the world.

LuaHypArc

Thus, “LuaHypArc”, the new Lua scripting engine, was born. A truly inspiring name: ‘Lua’ for Lua engine, ‘Hyp’ for ‘hypersniper’ which was my online name, and ‘Arc’ for ArcEmu, the private server software. Cringe.

Sidenote: Like many young programmers, I had a massive ego. Everything I wrote had ‘hyp’ or ‘hypersniper’ in it, one way or another. I am sorry for being like this, but I also forgive myself for being literally 16 years old.

Big ego means big ascii art

Big ego means big ascii art

I’d never released software, or anything for that matter, to the world before. I didn’t understand how versioning worked, so I just picked version 1000 to start with, because I saw some other software using big numbers so I suppose that’s what I should do too (turns out the numbers I were imitating are actually revision numbers from actual version control systems and have a very simple and logical reason for being the way they are).

I posted the code, and instructions to get it running, on the WoW-V forums. The code was hosted on Mediafire, and users downloaded a zip and extracted it, re-compiled their cores, and then they were done. In my post I wrote down every command that was fixed and drew particularly big attention to having fixed casting spells on creatures. I remember trying to draw people in by writing in huge letters that it was endorsed by the ‘celebrities’ of the forum (after asking said celebrities first of course).

The endorsements must have worked because people started downloading it, and I started getting feedback. Suggestions. Bugs. A lot of nice words of thanks as well! I continued working on the engine bringing over some more stuff I cut out of the initial release. I kept on going with my crazy meaningless versioning system. By the time I’d passed 2000 I had made some pretty big changes – and this was the first instance where I thought, “my job is done.” I’d go back to writing fun scripts and helping out on the forums, writing tutorials, maybe working on that project I always wanted to get around to.

It kept getting more and more popular, and more and more suggestions kept coming. People started bundling LuaHypArc in their “repacks” (repacks are like easy-bake emulators that are quick to set up but have fixed settings; they aren’t very customisable). Because repacks were easy they were very popular and the engine usage grew massively once again. It felt like everyone was using it at this point, and it completely blew me away. I was just happy to help so many people, I didn’t really think about the commitment I now had: to maintain it, to provide support, things like that. My afternoons after school became 1-2 hours of answering personal messages, helping people install the engine, and troubleshooting. It was a lot of fun at the time and it really felt like I was having an impact on the world – although a very extreme niche of the world.

Joining ArcEmu

Some time in November 2009 I received a personal message from the lead of ArcEmu, saying he was impressed with the Lua engine and invited me for a chat on IRC. I had never used IRC before so I furiously googled ‘how to join irc’ before working it out. It’s old school internet chat from the 90s — what people had before Discord. The natural gathering place for people who work on underground private server emulators. There I had a one-on-one chat with the lead where he basically explained that he wants LuaHypArc to be part of the ArcEmu default package and wants me to be part of the ArcEmu team to maintain it.

Ah, the Discord of 2008

Ah, the Discord of 2008

I remember being very excited by this offer. I didn’t really know what it meant, or what I was signing up for, and I didn’t even ask. The God of WoW emulation just invited me to be part of his team – there was no way I could say no.

Within a week I had shut down the old download link for LuaHypArc and pushed up the code into the main ArcEmu project. And it was done. Anyone using the ArcEmu emulator software, was also using LuaHypArc. I thought I would feel accomplished, I thought I would feel like now I’m done, but the goalpost just moved again. Now that I was on the team, I had even more things to do. More suggestions, bigger improvements – now from actual developers on the ArcEmu team instead of users.

In my mind, these guys were the real deal. They weren’t copy and paste programmers like me. They actually knew what the stuff I was copying around meant, for real. I was copying their stuff! They worked on the actual core emulation. They were reverse engineers, decoding the messages the game sent to the server, and implemented features off the back of that. They built the house, and I felt like all I did was polish the windows but was now calling myself a builder alongside them.

I remember very clearly a moment where I felt like a fraud. Once I joined the team, the ArcEmu lead was looking at some of my early code.

Lead: “Hey hyper, was just wondering. Why didn’t you use <very common C++ feature> for this part of your code? It would make things faster and more efficient”

Me: “I’ll be honest, I don’t even know what <very common C++ feature> really means.”

Lead: “Ok can you go and find out. Right now if possible please”

In addition to receiving personal messages and comments on my posts, now I also helped out on the ArcEmu forum and sat in IRC to answer questions.

Another “responsibility” of ArcEmu was going to team meetings which was something new to me. Being an Australian schoolboy it was hard to find a time where I could be in IRC at the same time as the other very global team, but we found a way. I only went to a couple of meetings, but they were an interesting experience.

There was one guy who would persistently tell us to wipe our hard drives because he heard some other emulator developer got visited by the FBI. Concerned, I asked others if this was serious, because I had a lot of schoolwork on my hard drive that I ought to back up first… But most of the team were just like “ahahaha, classic. Pay no mind to Mr. Paranoid over there.” which was slightly reassuring, I guess? I never ended up wiping my hard drive.

I continued working with ArcEmu for about another year. Many of the ArcEmu Real Developers™ were very patient with all the bad code I produced and dumb questions I asked over that time. Eventually though, there was only so much copy-paste programming I could do to fix the engine. It started to require some larger architectural changes which another developer from the team started working on. My final exams were coming up, so I couldn’t dedicate the time to the project too much. In addition to this, WoW released a new expansion and patches, and so there wasn’t much excitement for private servers still stuck on the old expansion. Interest dropped in the scripting community.

Finishing final exams, and heading to university to start learning computer science for real, marked the end of my time with World of Warcraft and private servers.

Addendum

I hope you enjoyed my recount which took us from a tauren named Konkor, to online scams, to being a part of some really niche World of Warcraft content creation and emulation communities.

I originally wrote this in late 2016, but lost the document; re-edited and published it in 2021.

All this stuff completely defined my teenage years. I’ve learnt that I remember less about my high school experience than others I know, probably because I spent it all online in private server communities. I’m thankful to have it written down so that I won’t forget this strange and unique way to grow up.



email icon