Introduction
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.
|