GreenCubes: from Minecraft to MMORPG for 4(?) year

Welcome, dear Habracha!

In this post I would like to share with you the history of your game project "GreenCubes" I hope it will be of interest to you and for some it will be even useful. I think this article may useful for those who are starting or have recently started some kind of game project, because the experience of others is always worth considering. I will talk about how harmful depend on the solutions and services of others how to do it all yourself and that dream is not harmful. Currently we are here.

Minecraft


Our project (in the beginning there were only two: I and Feyola) began as a Minecraft server for friends. That is, rather for friends of friends of friends, because with friends we played before, but this time decided to start on a more-less permanent basis and not to filter the people coming. Launch scheduled for 1 November 2010, in conjunction with the release Minecraft Halloween Update that brought a lot of new things in Minecraft. We parted with the old world and start all over again, seriously, and even without admin's commands.

Friends brought friends, some of them began to organize the stream — people began rapidly (by the standards of that time) to arrive. Literally within weeks, the project started to require us efforts: suddenly, from simple server, where we planned to play with friends, GreenCubes turned the server on which you need more work. I had to learn, and learn very quickly: it was required much from the ability to make important decisions, such as putting a white sheet or, for example, the reduction of the limit online, so the server fell (he was standing on the window :)) before administration of servers on Debian, writing your own plugins for the server and create a website.

Sites before I knew how to do, but everything else was new. It was the best time in our life, probably! We learned to lift the server on Linux and the Linux, writing plugins, and programming in Java, working with the community. Pretty quickly we decided that we should start to take this seriously and try to cash in on the project. The future looked uncertain, and even doubtful, but it was worth a try. At least, the free time was enough.

the Challenge


The first serious problem was that the Pentium 4 standing at the window, not stretched. After gathering our small savings, we decided to rent a server. The cost to rent a server on Windows (at that time, other options have been we know little) pushed us to learn Linux and to raise the server on Debian. So, buying the book and having read the manuals, Feyola was the "system administrator" :D

After that, we faced the need to create a full website for the project, and more. Run on every CMS I settled on the idea to remake one of the clones DLE for our needs. Aspiring designer friend whipped us up the layout of the site and forum, I quickly laid out and raised, secure the database authorization on the server.

Who knew that the engine was a hole in security: he made a backup of the database and put them into one of the directories of the website where criminals could find them. Somehow magically decrypt the password hash, the attacker not only flooded the site and the forum unpleasant labels, but also broke into the email Feyol's and the control panel hosting... the story Ended very terribly and only a year and a half ago: one person from the campaign burglars a purpose just to annoy posted stolen personal data on the Internet. We now have paranoia, very long and different passwords everywhere. I do not teach you the basic principles but always somehow think about them, until one time will become very bad...

Close up all holes and pretty ponervničav, we continued this difficult case. Next time we "stabbed in the back" the author of the plugin for a Minecraft server called "hey0" — modify the server, allows to write plugins in Java. And did the author of the plugin is this: he wrote, "I'm tired, I'm" simply completely stopping the support for the plugin. Then originated CraftBukkit — alternative modification that has become a substitute for hey0. But under it was not very important for us plug-in authorization! So I had to write it yourself.
And then to write other plugins, which are then merged into one big plugin called GreenCubes, which contained a huge amount of our unique features. All our ideas on development servers we realize through him.

Very quickly we have ceased to suffice for the server that we rented. After collecting a fair amount in those days for our money, we rented a dedicated server (previously huddled on the virtual). The new server has allowed us to keep online as much as 100 people! It was just an unprecedented figure, and none of these numbers then (in February 2011) was not. But the server slowed down enormously (the slowdown was more than 20 times of rated speed). Even a new dedicated powerful server tremendously inhibited when 80+ players online! We rested in the architecture of the Minecraft server. Once again we have failed that we are too dependent on third-party products.

By the way, by the time we have time to write fully your website. As we had very little in common functions of the CMS, make the website fit your needs was not easy. Small price to pay for knowing how we all work, where it is stored and for what we will always be able to do what we need. In future, we are seriously helped, as the integration of the site with the server increased significantly, and the site is overgrown with functionality, made specifically for our project.

By this time, the project began to bring some no, but the money. We sold a premium account, which included mostly log on to the server after the overflow and in-game items. To live it together it was still impossible, but the prospects were. If only it was possible to get rid of the terrible lag and give everyone an opportunity to play, who wants it...

Having taken the time experience in programming Java we imagined themselves to be "strong" programmers, able, if not to move mountains, then at least to fix bottlenecks in the server to become more productive. Unfortunately, we only loosened the server because of our "fixes" it started to slow down even more and sometimes even fall... Not to say that we haven't got a result: for example, we were able to translate the work of the furnaces in seconds instead of cycles servers that have improved the game, as to not have to wait for hours smelting ore (later the same obvious change was made by the authors of Bukkit). But then the first time we have decided that everything is very bad, and if we don't change something radically, that our project end: we can't reduce the limit of online gaming, we can't leave the server lag, and certainly can't increase the limit. Turn log on to the server had a huge (relative to online), people complained about the lag and long queue, left the project.

GreenServer


After another attempt to find a way to fix the situation, 21 March 2011, we came to a fateful decision: to continue to develop, we have to write your Minecraft server. Thus was born GreenServer.

GreenServer, in hindsight, was probably the most naive of all the task that we have set for ourselves. Neither I nor Feyola did not have enough experience in programming in General, especially in the creation of something so serious. I was sure that I will be able to finish all of the essential functionality by the end of may. As has become fashionable lately to say, "I never was wrong."

By the end of may, I don't have time to finish everything — all I had to do this awful zabagovannuyu test version with virtually no functionality. I was sure at least another month I'm sure everything will end, will do all that is in the official Minecraft server and our plugins, and we will go further. Again I was very wrong, of course. And although we managed with grief in half Jun 27, 2011 go to GreenServer, the transition was sad.

We got dangerously unstable server, which not only possessed great part of the functionality (no mobs, for example), and is constantly falling, not to mention the numerous errors. For the first two days we fixed them a lot, and somehow have moved from Alpha to Beta, that should mean at least stability. Then we decided that by the end of summer have to finish all that was lost in the transition, and move from Beta to version 1.0. If I should say that the server is in Beta still?
We produced 3-5 updates per week, but still did not managed in time. To move mobs from Minecraft's original code did not work because of the huge differences in architecture, and in the server, meanwhile, were all new and new bugs... We had to spend the entire fall 2011 in order to make GreenServer stable, but it was worth it! The server is able to pull more than 300 players at once (our record is 500+), and a reboot is required only to install updates. It was a success! It was then that we realized that the effort was worth the result. Perhaps we had the world's first full-fledged Minecraft server, though not with full functionality, but supporting a huge online and the official client latest version.

A lot of functionality, though in abbreviated form by the time it was ready, very poorly functioning peaceful animals we introduced back in the summer (we have no aggressive still), but completely lost function, we have not returned so far (and already decided not to return at all, but will tell about it below).

Client


At that time we dragged for Minecraft client. It was slightly modified, with plugins, but we always switched to the newest Minecraft client. With only one difference from our competitors is in the fact that from the new version we had only the figure. Most of the features of new versions of Minecraft are not supported by the server, and we have not introduced either deliberately or due to lack of time. However, some of the features we implemented, for example, we quickly made the pistons introduced in Beta 1.6, just thinking about how people can grifiti buildings and enter the needed measures of protection. A server after this update seriously suffered from griefers, but not us. We have learned to think that if one player can ruin the game to another player, he will certainly try to do it. Of course, not every player, but in a more or less open community will definitely be people who will want to hurt him.

After that, we decided to introduce their ideas, their content. We realized that to pull a meaningless regular client updates Minecraft is no longer possible and decided to stop to update the client and enter only the changes and not change a Notch ' (Creator of Minecraft) and Jeb'a (the one who started to develop after the release of Minecraft version 1.0). We stayed on client version 1.0 which just came out then. Our hands were more or less untied. With Minecraft we were on different paths.

We started to make major changes of content and gameplay, which require modifications of the client. Did the mod on the full writing (which to this day is a much higher quality than what was later introduced in Minecraft) in the community books have become quite important for every wealthy player has its own library, many players write their books or to rewrite books from other sources, developed (more developed) of the book-publishing business.

Made such major architectural changes as an extension of the maximum number of block types from 256 to 4095, which is also later (much) appeared in the original. Of course we don't claim the pioneers in these modifications, mods for Minecraft such features were long before them we did, but we were the first really big server that had this functionality.

Beginners


Then we thought that overall we have a great game, and all we need to ease certain aspects of the game such as the arrival of newcomers and the management of large cities and States.

With the support of our players, we have created a subway system which has combined our big world and is rightly proud of (it was completely built by the players, by the way), made a system of Organizations, which helps to govern cities and other big-game communities, have introduced many other changes.

To beginners it is easier to play, we have expanded the world, introduced a system of learning, created a town for beginners, in parallel, inserting quite a lot of new content. Greatly facilitate the registration and start of play on the server. In General, the issue of newcomers in the game — a very large and serious. It is always worth to consider when you start creating any game. You need to be aware of how newcomers get into the game world, what they will do in the beginning, as they learn about the diversity of what you can do in your game. I'm sure somewhere there is a whole bunch of articles on how to organize a pleasant entrance of the newbie in the game... We didn't even think about it in the beginning. You know that almost no one wants to take the learning quests? We know this very immediately.
We realized that our game is too complicated for a beginner. Even in spite of all our efforts to play, not read before that some of the guides and without the support of at least Wikipedia with a list of crafting recipes, it was terribly difficult the first time. We realized that first must change the crafting. We use crafting as in Minecraft, in which all the recipes have to remember or look. Of course, on the one hand it's an interesting gameplay decision, on the other — absolutely senseless: all the crafting recipes known and is comfortable crafting or recipe search, it turns out just uncomfortable remembering or voyeurism in third sources. We decided to make a beautiful interface craft, which will not have anything to remember. Came up, did the layout, drew the design... it turned out great! Only one problem: we again hit the limit of architecture. This time the architecture of the client.

New client


Perhaps the paragraph is not entirely clear far from programming graphics people, but I hope it will not be a problem.

Minecraft client made on OpenGL without use of the graphics engine. Even inside client code separation of the graphics engine and the logic is almost there, it means that the OpenGL calls mixed in with the code logic. For those who seriously worked with OpenGL, it may be clear that to amend this code, while it is not broke, it's awfully difficult. Need to be sure not to forget anywhere make popMatrix and other glEnd glDisable... and it is Not surprising that a year and a half of my work with this client code, which also was not written by myself, the client began to crumble. Just awful to crumble, ranging from simple lag, to complete the weird graphics bugs and crashes.

It became obvious to us that to make a new interface in the old client (and by the time we decided to change not only the crafting system and make a completely new interface) is simply impossible: even if I spent a lot of effort into its programming, it either will slow down or it will be filled with strange bugs, or will not start at all even on very powerful computers.

The correct solution was only one: we must begin to write a new client. But that's not all, the new client would not all of our problems.

New game


In spite of all our efforts invested in the development of the project, to date, our popularity has dropped significantly relative to our most successful days. There were times when the line of 200 people was considered the norm, but now online and not in peak barely exceeds 100. The problem for us was obvious for quite some time: we have nothing to offer players.

Once we believed that we have a great game, all we need to do social functions for a large number of players, such as city and economy, get rid of the lag, to give an opportunity to a large number of players to play simultaneously and we will be successful! Some times it worked, but then people again began to leave.

The thing was that we don't have much left of Minecraft. Except that miserable square models, Yes change the world. We have not introduced a large number of Minecraft features that were interesting to players, we didn't have diversity in mods Minecraft. We do Minecraft, actually, we didn't do anything. We had a lot of its content, we had change the world, but overall we didn't have a game people want to play. All I have left in the social sandbox, which ceased to be fun to play even avid this who have gambled for over two years.

All we have left is to make a game. Real game, with gameplay and not just a sandbox. But the main problem was that we wanted to make a MMORPG, while not losing our community and the developed world...

And by our third birthday (1st November 2013), but a new client, we announced the development of a brand new game is a MMORPG with a fully changeable world.

Indie-developers


Have you ever wondered about that big gamedev companies are constantly feeding us sequels have long been all nadovich hits? XI Assassins Creed, Call of Duty 20, Battlefield 9... what a large company allows itself to make something new, certainly something more or less new appears when some Blizzard is making its own DoTA clone, but it's not a new gaming concept.

This state of Affairs in the market of games, in my opinion, created due to the fact that game companies are mired in the business. When developing a new game, they first estimate the labor costs for the production, promotion, risks; calculate ROI and other business things. And only when everyone is accounted for and investors from the publishers decided that the project will pay off, starts working. All this leads to the fact that the developer simply release the next CoD with the confidence that they will earn the next billion than to do something interesting. Of course, not all fall under such an example... but try to minimize the risks almost everything.

In General, it turns out that only indie developers can make their ideas the way they want. They invest just your time and is free to dispose as they like. The only problem is that usually indie developers not professionals in game development, but their resources are limited. As a result, we either don't get the game at all or have an interesting concept, which can hardly be called a game. As an option — some very little game. Examples of really big indie projects are terribly little, it is not surprising.

Game design


We have set ourselves, in my opinion, one of the most difficult goals in game: to create a full online RPG with a fully customizable world.

It was difficult for us to refuse to modify the world, as we need to maintain the existing project and then save the players and the world. Otherwise, we would have nothing to eat until we develop a new game. Besides, to start the project much easier when he already has the audience, since it is not necessary to spend forces for promotion. And that's not counting the fact that the mutable world is a great "trick" the game, which is now very popular and hardly will soon cease to be such, and really good online projects with the changeable world or at least the possibility of building quite a bit.

Fortunately, since we were a Minecraft server, we have the experience of solving problems with a variable world, such as: the place for newbies zagazhivanie world, jam and other players — do not have the experience to do something like that would be insane!

It was decided to do three things: I'm developing a new customer Feyola thinks the game design, and in parallel we are together supported the existing world, making a few updates. After the completion of the client we will begin to introduce new gameplay.

If anyone is interested, what we're imagining, the most basic ideas collected here. Simply combine the good ideas to create a good RPG, as it turned out, a little. Thinking through all the details, we found that all terribly difficult. Balance, and various things... currently, details of gameplay are still being worked out and will be worked on for a long time. Some things we will begin to introduce before it will be thought out, but until then there is still time :)

Programming


The programmer in our team one is me. Although really quite a few, to work in a team I don't know how and don't really want. Overall, this is of course my personal problems, but it is worth mentioning that to pull such a project one (in terms of programming) is very difficult.

We have already written the server, and then part of the work done: only need to write the client. It would seem that can be easier with such experience. I very much "communicated" with the client ID Minecraft and was sure to write the new will not be difficult, especially on a normal engine. I never was wrong, as they say...
The shortage of experience in graphics programming started from the very beginning: from a simple misunderstanding of how shaders work and what to do with them, before I efficiently render text on the plates.

The customer decided to write in Java. I have many reasons why Java and not C++, for example, there can be a whole article to write about it, so discussion on this subject is not open (a Java haters gonna hate). But the main reason is that I know Java, know how to write it multithreaded code, written in Java. The use of other languages would require a lot more hours of training, debugging and writing code. In Java you can do productive client application, and I'll prove it :)

Of course, we had the opportunity to take some Unreal Engine or Unity and write the client script for their languages... But it would create new problems: first, I would have had to deal with the licenses and other red tape, the project is still commercial, so you need someone somewhere to pay, often it is not clear how much and in what way (Unity, of course, the advantage in this question over UE). Secondly, the change the world requires the ability at a very low level to collect meshes (models) of the landscape, so we need access, preferably in "the bottom", to the code of the engine, not the scripts, even compiled. Again, there is a problem with learning all of the intricacies of the engine.

I stopped at the open-source engine jMonkeyEngine version 3.0. This is a fully open engine written in Java. As the renderer uses OpenGL. Other engines in Java, most probably not, but it's not a problem: jME has everything you need. To be honest, this is the best library that I worked, not counting trove.

Current situation


Despite the fact that our project is now much less popular than in the best of times, we kept quite confident. For four people GreenCubes is currently the main work: except for me and Feyol's, we have a staff artist and someone like community Manager, which deals quite a large range of work with the community and different small tasks. In General, the community is terribly important: we are at present free of charge help of a few moderators and helpers, solving ingeym-the problem of the players and tracking the order, and our forum is fairly large and active community where we discuss not just our project. In General, there is a certain group of players for whom we have become almost second life, who has been with us for almost three years. It's pretty nice :)

concluding remarks


Of course, I have something else to tell you, but the article was already too long. It would be much better if you just ask your questions: some I can answer immediately, some will allocate for a single article, which can be displayed when accumulated what you would show/tell. So ask your answers; if you want something specific I tell you more — write, too.

The article was not written for the purpose of advertising, I do not make it difficult to remove links if they are confused. I just like to write — sometimes it's useful, leading thoughts in order. And of course I hope that experience will be useful. I deliberately did not want to draw any final conclusions or give advice because I am not an expert in anything from what I write, so my advice to someone can only hurt. Except that one: use a strong hash with salt, as well as long and different passwords!

Huge thanks to my friend and colleague Xitaly for text editing.

To be continued...

UPD: Sorry, the post was moved to "I'm a PR", here he looks completely different. In the original he was in "Game Development".
Article based on information from habrahabr.ru

Комментарии

Популярные сообщения из этого блога

Fresh hay from the cow, or 3000 icons submitted!

Knowledge base. Part 2. Freebase: make requests to the Google Knowledge Graph

Group edit the resources (documents) using MIGXDB