Let's get back three months before the beginning of my internship. Blizzard just released the private beta of the long waited real-time strategy (RTS) game Starcraft 2, a remake of their first extremely-successful game. I wanted to run a website for this promising game and started SC2Mapster.com. It is focused around the Map Editor of the game.

Start

I spent countless hours working on custom maps for Warcraft 3, the other RTS franchise from Blizzard. Therefore I decided to run SC2Mapster. I did not start the website from nothing, we adapted a custom web framework called CurseForge that we use for the addon developers. It has built-in support for file hosting, forums, announcements, wiki, etc... Everything needed!

Great, now it's time to get people in. At the time of the launch there were three kinds of competitors: important Warcraft 3 websites about custom maps such as HiveWorkshop, WC3Campaigns or Nibbits, huge portals about Starcraft 2 with a mapping part like TeamLiquid and new sharks like us.

The strategy that I use was to behave like a user. The map editor was not yet released but we could analyze the already existing maps. During this period I started contacting the few users that were hacking the maps and told them to come on the IRC. At the same time I started an effort to document all the parts of the editor. In order to get traffic from outside, I created the first custom map that was not just a basic modification of existing maps: Mapster TD. It has been linked on various non-mapping related websites and the video was viewed 35 000 times.

News

In the early days of Starcraft 2, it was really difficult to know what happened in the modding community. Everyone was working on his own and did not communicate with each other. I spent a lot of time seeking for websites and people that were acting in the area. Since I found some cool projects, I started listing those in the front page of SC2Mapster.

Quickly, people started to visit the website as they wanted to know about the Starcraft 2 map making. At the beginning the majority of links were sending people outside of SC2Mapster. Interestingly, people sticked to our website. They started contributing on the forums thanks to the news I was writing.

As it shows great results, I decided to start writing news at a daily rate. This was quite a challenge as I never had any experience in journalism. At first this was hard. I did not really know where to find good source of information. There were many interesting projects going on but they rarely provided material that was good to show. I started contacting people and ask them to make content that I could news. In 6 months, not a single person did not answer me or did not wanted to do it, this was really impressive!

I found that the best way to show off maps was video. The other options are text or screenshots. Text is painful to read and does not represent well a map. Screenshots are better but it is really hard to show liveliness with it. It is also painful to browse more than 5 screenshots. I decided to use video as primary support, if a project does not have a video then it will not be newsed. About a month after the adoption of that guideline, a lot of project started to do videos. It substantially improved the communication quality of a lot of projects.

Contest

A contest is an effective way to stimulate a community. The Starcraft 2 map editor being powerful, it gives wide range of areas to explore. When a contest takes place, this is the opportunity to make everyone focus on the same objective for a given period of time. This is also a motivator since the entries will be rated and a winner elected.

Contests were organized at a rate of two per month. One week to do the entry, one week to vote. As you can see, all the thirteen contests were unique.

  • World of Warcraft Boss Contest September 21st, 2010
  • Epic Battle Scene Contest September 2nd, 2010
  • Blizzard Custom Map Contest August 13th, 2010
  • User Interface Contest August 4th, 2010
  • Minigame Contest July 21th, 2010
  • Creature Contest June 29th, 2010
  • Wallpaper Contest June 17th, 2010
  • Spells Contest June 9th, 2010
  • 3D Modeling Contest May 26th, 2010
  • Melee AI Contest May 25th, 2010
  • Cut Scene Contest May 14th, 2010
  • Clock Contest May 2nd, 2010
  • Inventory Contest April 11th 2010

How to make a good contest

This is hard to organize a good contest.

The most important thing is to define the objective: stimulate the community. The community as a whole needs to participate. The rules of the contest should welcome both the newcomer and the expert. The challenge lies in the huge difference in skill between both, we want to make sure that everyone has a chance to win.

The first step toward this goal is to limit the time of the contest. Giving a week is enough for people to make interesting things, but not enough for a polished product. Therefore all the entries will be prototypes. The concept submission will be remain important factor. A week is also short enough so that people will start working right away, and not be tempted to do it later on, and then forget.

Then the subject is important. It must be balanced between specificity and openness. Each contest should have a specific theme so people have the feeling that they are competing on the same field. But it should give the opportunity to innovate. You want to vary the themes of your contests and make them cover all the features of the domain.

Since not everyone will participate, we make people vote for the best entry. This voting phase will show all the entries to the community. The results will be biased as people who vote will probably judge only with the provided videos and not test the map. But this is not important as the goal is to get people involved!

Incentives. I found out that people would gladly enter the contest even if there was no real prize. Being highlighted in the front-page of sc2mapster is motivating enough. If we were to put cash prizes, people would be less likely to do it for fun but try instead to abuse the system to win.

Finally, listen to the community. A lot of people came to me with contest ideas. However take care, most of them will not be good contests. Make sure you adapt them to fit all the rules I highlighted and eventually they will be good to go.

Moderation

The site got bigger. At one message per minute at peek hours, it was no longer able to review all the messages that were posted. Therefore it became difficult to moderate the forums.

We made a call for moderators and we were really surprised that 40 people applied. It was a tough decision to chose them. In the end one moderator was assigned for each forum, and three for the most active one. Using the activity count and their preferences we picked 13 out of all the applicants.

I had great faith in the moderators we took and wanted to give them the ability to conduct a project of their choice. It would be advertised on the front-page and labeled as an official SC2Mapster project. However this failed. This was more perceived as a constraint instead of an opportunity. It also confused them as to what were their role.

Another mistake we made was a lack of communication. We did not force the moderators to go into our private IRC channel. Therefore we were not able to create a group feeling. This was amplified by the timezone differences: the Europeans rarely talked to the Americans.

Even if I wasn't a really good manager, they did an awesome job at moderating the forums.

Working on the World of Raids Guild Recruitment I needed to make sure the user was really member of the guild he claimed to represent. Since there is no official API and we don't want to ask for the user login and password, we had to find an other way.

The idea is to take advantage of the official Armory. When the user logs off the game, his character profile is updated on the website. To make sure the user is who he pretends to be, we are going to ask him to make a change on his character, wait for the armory to update and verify.

Since it's a tool that can be useful to anyone, we decided to make it a standalone service with an open API. If you have a World of Warcraft website and feel the need to verify that your users are genuine, this is your chance!

It has been in activity since the launch of the recruitment tool. So far 100 conflicts have been automatically resolved thanks to this tool.

Check out WoW Genuine.com.

World of Raids Guild Recruitment

Guild recruitment is a recurrent problem in World of Warcraft, many attempt have been made but none succedeed so far. After a brainstorming we decided that the following points were crucial.

  • The guild recruiter has to spend less time as possible to set-up a guild and maintain it.
  • The guild search must be easy and focus on what people expect from their guild.

With these points in mind, we had to find technical responses in order to make the World of Raids Guild Recruitment Tool.

  • What You See Is What You Get: The guild management interface is the final display, there is no intermediate step.
  • Tailored Widgets: About every widget has been heavily customized to fit the user need.
  • Automatic Save: Every time you make a change, it is automatically published and available to anyone!
  • Javascript Search: Having all the guilds fetched during the loading allows to have a complex filtering system instantly updated.

Guild Search

Looking for a guild should no more be a pain! You just have to tweak the filters and result appear sorted as you edit them! No more long page reload or even ajax requests. It is instant!

We focused hard on making filters one click away. We also took great care of the raid time filter, it is an important aspect of the guild choice that is too often avoided because of its complexity.

For more details on the optimizations made, see the post Guild Recruitement – Search Optimizations.

Guild Management

Our original goal was to be able to create a guild in less than a minute (yes, 60 seconds!) and we pretty much did it. The proof in the following video.

In order to achieve this, we opted for a Wysiwyg approach to remove the need of making two interfaces for both display and edition. Every widget has been tailored to fit the user needs. For example, as soon as you enter your name and realm, it automatically gathers your progression from the official website.

Presentation

Fooo is my first year school project written in Delphi. During 8 months, Vladimir Nachbaur, Alban Perillat-Merceroz, Felix Abecassis and I developed a game that mimics Warcraft III and achieved to be major of the promotion.

We tried to make no use of copyrighted Warcraft files, however, a large majority of custom models are based on Warcraft files at some point and use some of their textures. All the interface graphic, icons, models has been made by fans and we are using them with their approbation.

What's the game able to do :

  • Animated 3D Models
  • Interface in XML/Lua
  • Building & Unit creation
  • Group and Subgroup management
  • Group movement with formations
  • Ranged & Melee Attacks
  • Multiplayer over LAN or Internet
  • Ingame Chat
  • 2 Races: Treants and Rats
  • And much more ...

Demonstration Video

My work in the project

Interface

A RTS game is requiring a lot of user interaction, so it needs a complex interface. I decided to make an interface engine like the one used by World of Warcraft. The content is displayed through XML files and scripted with Lua. If you are not familiar with this, you can think the XML as HTML and Lua as Javascript.

The interface engine is able to do the following:

  • Supports Frame, Texture and FontString elements
  • Ability to draw Backgrounds and Borders from images
  • Mouse and Keyboard Interaction
  • Inheritance and Virtual Frames
  • Position through 2 Anchor points (element and its relative)

3D Engine

The 3D Engine is written on top of OpenGL. I've been confronted to two major problems. The first one is the Warcraft III models: there is really few documentation on them so i had to spent quite some time to reverse engineer them and figure out how animation were working.
The engine had to be optimized in many ways. At first, displaying one building was freezing the PC, now we are able to show more than 100 units and the game still runs smoothly.

The 3d engine is able to do the following:

  • Animated Warcraft III Models
  • Camera: Zoom and Rotation
  • 3D Picking
  • Frustum Culling
  • Vertex Array

Learn more

If you want to learn more, for each presentation we made a 30 page document (french) explaining in detail the progression. You can read them at hgf.fooo.fr.

CosmosUI is an open source interface modification of World of Warcraft. Many of the CosmosUI additions were later implemented by Blizzard on the default interface.

I had been doing Warcraft III map making for more than a year when World of Warcraft has been leaked. This was really exciting to hack into the game and being able to modify it. Since I had no real programming knowledge at the time, I could not help people making a server for the game. However, I found the interface in XML and Lua really interesting and spent some time tweaking it.

There was nothing real to do in the sandbox servers at the time, I spent some time programming MiniGames (TicTacToe, Connect 4) in the interface. I have been remarked by Thott (thottbot.com) that gave me a Beta key in order to work on the open source interface modification project he took part: CosmosUI.

I have been working on CosmosUI during the whole beta and these are my notable additions.

QuestMinion

During the Beta of World of Warcraft, the only way to see your quest progression was to open the quest log and search for the quest you were doing. I made an addon that would show a summary of the quest you wanted in a small movable box located under the minimap by default, read about it on Guided Hacking Forum.

Since I did not want to maintain a standalone version people started making addons with this concept. The most successful is MonkeyQuest downloaded 1 million times. Blizzard added later a Quest Tracker functionality to the World of Warcraft default interface that is a nearly exact copy of QuestMinion. The game Warhammer Online made the same choice for its interface.

Quest Minion

Quest Minion

World of Warcraft

World of Warcraft

Warhammer Online

Warhammer Online

Addonification

At the beginning, CosmosUI was just modifications of the World of Warcraft interface files. This was good for small modifications but once CosmosUI grew, we had to make some tricky diff every time a World of Warcraft patch was released. CosmosUI was the only interface modification at the time, so people would be without interface for about 12-24 hours while we were merging everything.

I found a solution to this problem. Instead of modifying the actual code, we can hook the specified function and put our custom code in another file of our own.

local thefunction_backup = thefunction
thefunction = function (args)
  -- Do what we want before
  thefunction_backup(args)
  -- Do what we want after
end

I first moved my modifications out of the Blizzard code and everyone started to do so. Then a few weeks later Blizzard implemented an addon manager into the game. With the preliminary work we did, it was really easy to transform CosmosUI into an addon without any file dependency.

Localization

When I started working on CosmosUI, it was only available in English. Since I am French, I wanted my fellows to be able to use it in their native language.

CosmosUI being a compilation of multiple addons, I first started to make a translation template and applied it to my own addons. Then I put all the strings of all the CosmosUI addons into their respective English translation file. And finally, I formed a translation team composed of French and German people.

Once everything was translated, I started to advertise CosmosUI in the French community and made the technical support.

Sky - Communication Library

In order to make my MiniGames multiplayer, i had to transfert data between the two players. The only way at the time to achieve it was by text messages. However, they are visible to the user. My work on Sky was to automatically join a channel, hide all messages from this channel, make it invisible to the user and finally intercept the incoming messages.

Since channels were only available with command lines, they weren't used that much and their internal API was really buggy. Most of the job was to find workarounds for these bugs. Sometimes channels weren't saved across sessions, they would be joined there but not listed or not joinable at all. For more information you can read the description on WoWWiki

Quote

Christopher was one of our top contributors on the Cosmos project, overseeing both community relationships in the French community as well as developing several mods within the community. The most revolutionary of these was the Quest Helper addon, which became so infamous and popular that Blizzard added it into their base UI. Christopher was a major contributor to the project's culture, content and community. It would not have been the success it was without his direct contribution and passionate commitment.” April 27, 2009 -- Alexander Brazie, Cosmos UI Team Leader. (LinkedIn)