Introduction Articles in the Series • Part I • Part II • Part III • Part IV • Part V My name is Radu Privantu, and I am the founder and co-owner of Eternal Lands (www.eternal-lands.com), a free MMORPG. For a little more than 2 years I've been the lead programmer and project manager, but due to the limited number of people working at the project I also had to do some marketing, game design, and public relations. A few weeks ago I decided to quit the development of Eternal Lands, and leave the project to the other team members, but that doesn't mean I totally abandoned it. I still take care of some minor things, give suggestions to the developers, etc. But now my main focus is another MMORPG, that will be the game I always wanted to make. More details about this new project will be found in the last part of the article.

I believe that many could benefit from my/our experience with the Eternal Lands developing, so I am writing this article hoping that it will shed some light in a relatively obscure area. If you are working on an MMORPG, or if you plan to make one, this article can save you a lot of time, offer some advice and help you avoid making the mistakes we made. Even if you are not working on an MMORPG and you don't intend to ever work on one, this article might be interesting. There is a lot I have to say, so this article will be divided into 3 parts. The first part will be the introduction (how we started, what happened when the game became public, etc.), the second part will contain various elements about what we did when the game became more popular, how we set up the economy, skills, etc. and the 3rd part will focus mainly on the mistakes, why I left, and some details about my new project. The article will be mainly narrative, rather than technical. At least for me, narrative articles tend to be easier to read, and less boring. But don't worry, there will be some technical details where needed. So, let's start with the beginning. The Dream Ever since I got my first computer (it was a Spectrum 48K) in 1992, I wanted to make games for living. At that time I didn't really have the skills, but I knew that if I will ever make a game I'll have to work at it myself, not just sit in a chair and order people around (and, if possible, get all the money too). So I started to learn some BASIC, and some Z80 assembly. At that time I didn't realize that Spectrum computers were already obsolete, and no one would actually buy such a game. Six years later, when I was just out of the high school I got my dream job: Assembly programmer for a real-time strategy game. That was a real job, getting paid every 2 weeks, working with other developers in an office, getting free drinks and learning a lot of new things, especially teamwork. Seven months later, I quitted that job, because of some dissatisfaction in the management (I wasn't making that much anyway). Just before quitting, I had this dream about making my own game, a game where a lot of players can build houses, farms, grow animals and crops, have elections, go to war against CPU controlled entities or other cities, have pirates, looters, attacking the travellers, etc. and it was supposed to be some sort of medieval simulator. So, after quitting that job, I started to write some code, and in a few months I had, well, absolutely nothing. I was moving in the wrong direction, so I just abandoned it altogether, but I did have a plan to resurrect this project of mine. A few months later (end of 1999) I got a new job, and I managed to convince my boss to let me make an MMORPG. For some reason he agreed, and I worked at that game for about 6 months. At that time, the only programming language I knew was Assembly, therefore both the client and the server were written 100% in ASM. Six months after the project was started, the programming was going well, you could walk in the game world, chat to players, had some basic weather system (snow and rain), but I was totally lacking the art (my boss didn't hire an artist yet). Eventually, he did realize that in order to finish the game and make money off it would take much more money and time, so he decided to put it on hold, and assigned me to some more productive things such as web programming. That's when I learned PHP and mySQL. Learning PHP was extremely useful for me, because later on, in 2002, I was able to learn C. But knowing ASM and PHP made the learning curve so much more acceptable. With C, I also started to learn OpenGL, which seemed very easy and intuitive for me. After a few small projects, primarily designed to make me more familiar with the C language, I realized that now I could actually make the MMORPG I always dreamt of. My wife is a good artist, and we had a lot of free time, so I proposed her to work on some houses, trees, some tiles, etc. so that I can get started. She wasn't entirely thrilled about that idea, not believing that two people can actually make a game. But eventually she agreed, and in October 2002 Eternal Lands started. At that time, it wasn't named Eternal Lands. In fact, it had no name. The name came later, in December, when we wanted to have a website containing some screenshots and more details about the project. Like I mentioned before, the project started in October, I think it was October, 2nd. First, I was working on the client side. In a few days, I got the ground (a tile array) and a minimal camera system to work. So I was able to move around a tile field that look more like a chess board rather than like a MMORPG. Then I placed some textured tiles, so we actually had some colored environment. Next step was adding some 3d models. At that time, I was using an ASCII file format (similar to the 3D Studio ASC format, but had the possibility to add textures and materials). The ASCII file format was nice and readable, but it was very slow. It took a few seconds to load and convert an object, but we went with it anyway, since we didn't have a lot of objects at that time. In the beginning of November, I added some animation, by loading the ever popular tris.md2 model (that's some sort of goblin, for those who didn't play with MD2 files). Then I had to add some light to the game, because without lights it looked kind of ugly. With the lights I also added day and night effects. Originally, there was only day or night, but later on I added a smooth transition between them. The framework was ready, but it was very difficult to create maps (the maps I did my tests on were hard-coded). So I had to start working on the map editor. The map editor was crude but effective. It took me about one month to have something that could be used to create maps. It had some bugs in it, and it lacked many features that were eventually added. At this time we realized that the ASCII file format we used for the 3d objects was really unsuitable for larger maps. It took up to one-minute to load maps with lots of big objects, so I had to switch to a binary format, which loaded much faster. The Mistake While a map editor and a 3D engine is enough for a single player game, you need a little more than that for a MMORPG. The server work started in around November. I used a very minimal chat system that came with SDL_net and started to build on it. First I had to do the log-in part, which was easy and painless. Then I had to make it so that you can create characters, and save them when you log out, which wasn't really complicated either. The next logic steps were the server sending the client the map it's on, making it so you can see other players around you, chat, private messages, a few commands to indicate the time, data and number of players online, and other small tasks. The real challenge was implementing a path-finding solution. It took me about a week to study different path-finding algorithms, and about another week to implement it, in addition to another week debugging and optimizing it. So by the end of January, we had the basic skeleton ready. So far, everything was perfect. Then we made the biggest mistake ever: We announced on our website that we will have a pre alpha version on February 13th. However, we did keep our word. The first version was rather primitive, the only thing you could do was walking around a small island, chat with those around you, and sending private messages to other players. By the time we released the game, we had 179 registered users on our website, so I sent an e-mail to all of them telling them the game is ready to be tested (I did warn them of the limitations). Prior to the public Pre Alpha, I was pretty naive. I had some very unrealistic expectations, such as expecting to have about 80 players online at any time (I was figuring that since we have 179 players that want to try the game, they will all come online, and, of course, they will stay online about 10-12 hours/day, which was an average of 80 players at the same time). Obviously, my calculations were a 'little' wrong, and in the first day we had a whole 7 players online at the same time, about one hour after releasing the game. They looked around, got bored, and logged off. Some of them returned the next day, bust some didn't. The next few days we had a very small community, maybe about 10 members logging on and off. I was a little disappointed on how small our community was. I couldn't really understand why the players weren't exactly thrilled by our little world. I was thinking that since so many people spend a huge amount of time on IRC, we'll have plenty of users, because our game is like a graphical IRC where you can walk and role play. The game was a little buggy, so a week after the first release we already had a patch. The patch fixed many bugs, and added a few new features, such as the ability to see which player is which (prior to that there was no way to know which player is which). Here is the exact entry in the change log regarding the first update: Version: 0.5.7 Pre Alpha - A bug that prevented the text to display properly (it appeared as an avalanche of lag) was fixed. - A few minor optimizations (should increase the frame rate by 5-10% in places with many objects, like cities or forests). - Now you can invoke the console by pressing F1. This was done to solve a problem for those with non English keyboards. - Some small changes in the start map, it should look better now. - A whole new, BIG map. Just walk into a teleporter from the start map. - Now the client will try to autodectect if the frame rate is too low, and if it is, it will disable the shadows. - Now you can look at players, and get their name - The working icons on the interface change their color when selected, or mouse over. - The conversation is saved in the file chat_log.txt - Fixed a bug where the game just quits when it couldn't resolve the host (now it will let you retry, and will give an error message) - Fixed two bugs when you reconnected to the server, after being disconnected. That is, if you were sitting at that time, now you can sit again. Another bug was that the players in your range were not cleared, and they appeared as 'ghostsly ghosts'. - For those who didn't read the license, and run the game, will prompt them with an error message (a very mean/sarcastic one). Hopefully, they will feel offended. The last entry might sound a little confusing, so I'll explain it here. Initially, we wanted to prevent 'stupid people' from logging in to our game. So we used a little trick: in the configuration file, we left the server address as localhost, so by just downloading the game you wouldn't be able to play. The instructions on how to change the address were found in our "License", in the middle of it. We did place a link from the website to the license, and we did specify that you will not be able to play the game unless you read the license. But many people didn't read the license anyway, so the first update gave them a hint, in case they couldn't connect to the server (just read the god damn license). Of course, not even with that hint there some of the players couldn't bother to read the license, so I guess we overachieved our goal (of not letting ignorant people playing our game). Eventually, a few months later we removed that trick, because we were losing too many players, and that wasn't really good. Improvements Having only two people working at an MMORPG can be quite straining, because there are a multitude of tasks you have to focus on, and this kind of multitasking is not really good. For example, my wife had to do the 2D textures, 3D objects, animations, and the maps. The maps in particular took a lot of time. The biggest map had about 32K tiles, more than 5K 3D objects and more than 3K 2D objects. When one of our players, Moonshadow, offered to help with some map-making, we were, of course, very happy. He was very skilled, and soon after he became the head map0maker. Before having him in the team, we had three maps: the starting map and two other maps connected via portals from the first map. This was a little awkward, as the world had no consistency. 'Moonshadow' changed the way the maps were linked, making a "world map", where each map was a part of a big continent. The teleporters were removed, and instead we had ships that took you from a map to another. Some teleporters were placed in the biggest map of the game, to allow faster travel between distant points in that map. Eventually, a few other players created some maps, and on Oct. 30, 2004 the entire first continent was finished, with the exception of one map, which will be included in the next update. The graphic part was also progressing nicely, we added new objects with every update until the spring of 2004, when we decided that the rest of the objects Roja (my wife) is creating should be used for the pay-to-play version. Choosing the right programs for the art was relatively difficult. She was already familiar with Photoshop, and even had a license for it, so all the 2D art was done in Photoshop. We did consider using GIMP, but it doesn't have support for drawing tablets (in fact, it has no pressure support) so it couldn't be used. For the 3D part, we had to choose between Maya, 3D Max and Blender. We wanted to go legal, and not use a cracked version, but we couldn't afford to pay 2.5K USD for Maya, or 3K USD for 3D Max. We looked on ebay for cheaper versions, and we did find someone selling Max 5 + character studio for about $1000 USD. We contacted that person, and he contacted Discreet for a license transfer, but they said this is not possible. So we went with Blender, which is a great, free 3D Modeler and renderer. So far, it has met and exceeded all the expectations. By May 2003, we had a few new game features, such as the ability to pick up and drop items from your inventory, harvest resources, and level up harvesting (which was the only skill that worked). In June, we had our first non-player characters (NPCs), so we had some shopkeepers and a few quests. Even though our engine became a game (since there were a few things to do, other than walking and chatting) we had virtually no increase in the number of players online. Many people downloaded the game, created a character, but left after a few minutes never to return. Some of them had technical problems (such as old computers without hardware 3D acceleration), but most of them actually expected more than harvesting items and completing a few quests. This was very disappointing for me, and felt like giving up many times. The end of June and beginning of July was a very productive period for us, and a few newer features were added, such as trading between players, the ability to manufacture some items, and a new quest. More player attributes were also added at this time. Still, the player increase we expected didn't happen. I think that the record of players online at that time was around 15 or so, and the average was 5. The end of July brought even more resources to harvest, more items to make, and a few graphical improvements, such as floating health bars above the heads of the players. Of course, they were pretty much useless since there was no combat yet, and no way to lose health. A rudimentary magic system was also added, but only a few spells were available. As a matter of fact, even at this time the magic system is perhaps the most left behind thing in our game. August was a slow month, due to the fact that we had to get some part-time jobs. But I still managed to add the some AI to the game, in the form of non-aggressive animals. They didn't do much except for walking around. There was still no fighting implemented, but you could kill them with the poison spell. So that set the groundwork for combat, since some server-side routines had to be implemented (such as die and respawn). We also had to revise the way the harvesting was working, because some people using auto-clickers managed to get to insanely high levels in just a few weeks. So we added a limit of 50 harvesting that gave experience each hour. So basically you could harvest all you wanted, but got experience only for the first 50 harvesting. A few weeks later we increased that limit to 120, which hasn't changed since then. In September, we finally had combat! With the combat finally there, we had to add some new skills (combat, attack and defence). We also had the ability for a few NPCs to train the user, but only after finishing some quests. Without training, it was almost impossible to stand a chance even against rabbits. This was a big mistake, many new players came in the game, attacked rabbits, died, went to the underworld, got stuck in there, and, of course, quitted the game. Eventually I had to change the starting stats and give the players stronger attributes by default, so they can stand a chance prior to finishing those quests. With the addition of combat, we started to have more players online. The growth was pretty fast actually. Before September we had around 5-10 players logged in at the same time, and by the end of September we had over 25, and in November we had over 50. I haven't said anything yet about the server hardware, and for a developer this is very important. The first server we had (since the game launched in February) belonged to a friend of mine (in Denmark). It was a PIII 750 MHZ, with 256MB RAM had a 512Kbauds out and 2048Kbauds in. While in the beginning this was more than enough for us, he also used some of that bandwidth for his own sites, and to make things worse, we also used his server for the eternal-lands.com site. We realized that sooner or later we will need our own, dedicated server, but couldn't afford to pay $100-$200 USD/month from our pocket, especially since the game didn't generate any income. Late August, I got an e-mail from a French company about that they were interested in our game, and proposed us a deal: "We give you free hosting for your game server on a dedicated server, in a professional data center, and when your game is ready you give us a license so we can have a French version of Eternal Lands". This seemed a very good deal, so we accepted it. The server they provided was a PIII 850 MHZ, 256MB RAM, and a 10Mbps connection. We had to do some extra work, and implement French characters in the game, and while I was at it I also implemented German and Danish characters. There was no real Unicode support, only some hacks, but it was pretty effective. Our old server was running Linux (Red Hat 8), and the new server was running FreeBSD. The transition was very smooth; all I had to do was to modify some headers to change the path of some #include files. However, there were some latent bugs that started to manifest when we switched to the new server. Different OSes treat uninitialized variables differently, and while a variable on Linux was initialized by 0, on FreeBsd it had a different value, resulting in a nasty crashes. The next part of this article will contain information about the next months of development, how we attempted to fix the economy, what happened when our population increased, and how we decided to make the client Open Source. It will also discuss the reasons for why I decided to quit and the lessons to be learned from some of the mistakes we committed.