GreenCubes: from Minecraft to MMORPG in 4 (?) Years

    I greet you, dear Khabravchians!

    In this post, I would like to share with you the story of the development of my GreenCubes game project, I hope it will be interesting to you, but it will even be useful to someone. I think this article can be useful to those who start or have recently started some kind of game project, because someone else’s experience is always worth considering. I will talk about how harmful it is to depend on the decisions and services of others, how to do everything yourself and that dreaming is not harmful. We are currently located here .

    Minecraft


    Our project (at the beginning there were only two of us: me and Feyola) began as a Minecraft server for friends. That is, rather for friends, friends of friends, because we played with friends before, but this time we decided to start on a more or less constant basis and not filter the people who came. The launch was scheduled for November 1, 2010, timed to coincide with the release of Minecraft Halloween Update, which brought a lot of new things to Minecraft. We parted with our old world and started all over again, seriously and even without admin teams.

    Friends brought friends, some of them began to organize streams - people began to arrive rapidly (by the standards of the time). In just weeks, the project began to demand efforts from us: all of a sudden, from a simple server where we planned to play with friends, GreenCubes turned into a server, which we still need to work on. I had to learn and learn very quickly: it took a lot, from the ability to make important decisions, such as entering a white list or, for example, reducing the online limit so that the server does not fall (it just stood on the window then :)), to server administration on Debian, writing your own plugins for the server and creating a full site.

    I knew how to do sites before, but everything else was new. It was the best time in our life, probably! We learned to raise servers on Linux and Linux itself, writing plugins and programming in Java, working with the community. Quite quickly, we decided that we should start doing this seriously and try to earn money on the project. The prospect looked vague and even doubtful, but it was worth a try. At least there was enough free time.

    Challenge


    The first really serious problem was that the Pentium 4, which was standing on the window, no longer pulled out. Having collected our small savings, we decided to rent a server. It was the cost of renting a server on Windows (at that time we were not familiar with other options) that prompted us to learn Linux and raise the server to Debian. So, having bought a book and having read manuals, Feyola became a “system administrator”: D

    After that, we were faced with the need to create a full site for the project, with registration and other goodies. Having run through all sorts of CMS, I settled on the idea of ​​remaking one of the DLE clones to our needs. A familiar novice designer threw us the layout of the site and the forum, I quickly made it up and picked it up, screwing up the work with the authorization database on the server.

    Who knew that the engine had a hole in safety: he made backups of the database and put them in one of the site’s directories, where attackers could find them. In some magical way, decrypting the password hash, the attacker not only filled the site and the forum with unpleasant inscriptions, but also hacked Feyol’s mail and the host’s control panel ... This story ended very badly and only a year and a half ago: one person from the cracker campaign just to Salt posted the stolen personal data on the Internet. Now we have paranoia, very long and different passwords everywhere. It’s not for me to teach you basic safety principles, but for some reason you don’t always think about them until one time everything becomes very bad ...

    Finishing up all the holes and getting pretty nervous, we continued this difficult task. The next time, the author of a Minecraft server plugin called hey0 "stabbed us in the back" - a modification of the server that allowed us to write Java plugins for it. And the author of the plugin did this: he wrote “I'm tired, I'm leaving”, simply completely stopping the plugin support. Then CraftBukkit was born - an alternative modification, which became a replacement for hey0. But under it there was no authorization plugin very important for us! So I had to write it myself.

    After that, write other plugins, which then merged into one big plugin called GreenCubes, which contained a huge amount of our unique functionality. We implemented all our ideas for server development through it.

    Very quickly, the server that we rented was no longer enough for us. Having collected a lot of money for us at that time, we rented a dedicated server (before that, they huddled on a virtual one). The new server allowed us to keep online as many as 100 people! It was just an unprecedented figure, no one had such numbers then (in February 2011). But the server slowed down tremendously (the slowdown was more than 20 times the rated speed). Even the new dedicated powerful server was colossally slow with 80+ online players! We ran into the architecture of the Minecraft server. Once again, we were let down by the fact that we are too dependent on third-party products.

    By the way, by then we had already managed to write our own site completely. Since we needed very few common functions from the CMS, it was not difficult to make a site for our needs. A small fee for knowing how everything works for us, where what is stored and for what we can always do as we need. In the future, this helped us a lot, since the integration of the site with the server has grown significantly, and the site has grown with functionality made specifically for our project.

    By this time, the project began to bring some, but money. We sold a premium account, which mainly included the entrance to the server after it was full, and in-game items. It was still impossible to live on this together, but there were prospects. If only I could get rid of the terrible lags and give the opportunity to play to everyone who wants it ...

    By that time, having gained experience in programming in Java, we imagined ourselves to be “strong” programmers, capable, if not mountains, to at least fix bottlenecks in the server so that it becomes more productive. Unfortunately, we just shook the server, because of our “fixes” it started to slow down even more and sometimes even crashed ... I won’t say that we didn’t achieve the result at all: for example, we managed to switch the operation of the stoves to seconds instead of server cycles, which improved the game, since you did not have to wait hours for the smelting of ore (later the same obvious change was made by the authors of Bukkit). But then for the first time we decided that everything is very bad, and if we don’t change something dramatically, then our project will end: we cannot reduce the online limit, we cannot leave the server lag, and even more so we cannot increase the limit .

    Greenserver


    After another attempt to figure out how to fix this, on March 21, 2011 we came to a fateful decision: in order to continue to develop, we must write our Minecraft server. So GreenServer was born.

    Looking back, GreenServer was probably the most naive task of all that we then set for ourselves. Neither I nor Feyola had enough experience as in programming in general, especially in creating something so serious. I was sure that I could finish all the necessary functionality by the end of May. As it has become fashionable lately to say, "I have never been so wrong."

    By the end of May, I not only did not have time to finish everything - all I had to do was make a terribly buggy test version with almost no functionality. I was sure that at least after another month I would definitely finish it all, do everything that is in the official Minecraft server and our plugins, and we will go further. Again, I was very mistaken, of course. And although we managed with grief in half on June 27, 2011 to switch to GreenServer, the transition was sad.

    We got a terribly unstable server, which not only did not have a huge part of the functionality (there were no mobs, for example), but also constantly crashed, not to mention numerous errors. In the first two days, we fixed them just a lot, and somehow we switched from the Alpha version to the Beta version, which should have meant at least stability. Then we decided that by the end of summer we should finish everything that we lost during the transition, and switch from Beta to version 1.0. Should I say that the server is still at the Beta stage?

    We released 3-5 updates per week, but still didn’t do it on time. It was not possible to transfer the mobs from the original Minecraft code due to huge differences in architecture, and in the meantime there were more and more bugs in the server ... We had to spend the whole fall of 2011 to make GreenServer stable, but it was worth it! The server was able to pull more than 300 players at the same time (our record is 500+), and a reboot was required only to install the update. It was a success! It was then that we realized that the efforts were worth the result. Perhaps we had the world's first full-fledged Minecraft server, albeit not with full functionality, but supporting a huge online and official client of the latest version.

    A lot of functionality, albeit in a stripped-down form, was already ready by that time, we introduced peaceful animals that worked very poorly in the summer (we still have no aggressive ones), but we still haven’t returned completely lost functions (but we already decided not to return them at all, but I’ll talk about this below).

    Client


    At that time, we were dragging a Minecraft client. It was slightly modified, with plugins, but we always switched to the newest Minecraft client. With only one difference from our competitors, in fact, from the new version we had only a figure. Most of the functions of the new versions of Minecraft were not supported by the server, and we did not introduce them either intentionally or due to lack of time. However, we still implemented some functions, for example, we quickly made the pistons introduced in Beta 1.6, immediately thinking about how people can use them to grind buildings and introduce the necessary protection measures. Many servers after this update seriously suffered from griefs, but not us. We have learned to think that if one player can somehow ruin the game to another player, he will definitely try to do it. Of course, not every player

    After that, we decided to introduce our ideas, our content. We realized that it was no longer possible to pull in constant meaningless updates to the Minecraft client, and decided to stop updating the client, and enter only our changes, not the changes of Notch (the creator of Minecraft) and Jeb (the one who started developing Minecraft after release version 1.0). We settled on client version 1.0, which just came out then. Our hands were more or less untied. With Minecraft, we have had different paths since then.

    We began to make major changes to the content and gameplay, which also required voluminous modifications of the client. They made a mod for full-fledged writing of books (which to this day is much better than what was later introduced in Minecraft): in our community, books have become quite important, every prosperous player has his own library, many players write their books or rewrite books from other sources, developed (or rather, developed) book publishing.

    They made such serious architectural changes as expanding the maximum number of block types from 256 to 4095, which also later (significantly) appeared in the original. Of course, we do not claim the right of pioneers in these modifications, the mods on Minecraft with such functions were long before we made them, but we were the first really large server that had this functionality.

    Newbies


    Then we thought that in general we have a great game, and all we need is to facilitate some aspects of the game, such as the arrival of newcomers and the management of major cities and states.

    With the support of our players, we created a metro system that united our big world and is rightfully our pride (the metro itself was completely built by the players, by the way), made a system of Organizations that helps manage cities and other large in-game communities, introduced many other changes.

    To make it easier for beginners to play, we expanded the world, introduced a training system, created cities for beginners, while introducing quite a lot of new content. Significantly facilitated the registration and start of the game on the server. In general, the question for beginners in the game is very big and serious. You should always think it over when you start creating a game. You need to be aware of how beginners will get into the world of the game, what they will do at the beginning, how they will learn about the whole variety of what you can do in your game. I’m sure that somewhere there is a whole bunch of articles on how to organize a pleasant entry for a beginner into the game ... We didn’t even think about it at the very beginning. Do you know that almost no one wants to go through training quests? We did not find out very immediately.

    We realized that our game is too complicated for a beginner. Even in spite of all our efforts, to play without reading several guides before and without supporting at least Wikipedia with a list of crafting recipes was terribly difficult at first. We realized that for starters we must completely change the craft. We use craft as in Minecraft, in which all recipes need to be remembered or peeped. Of course, on the one hand this is an interesting gameplay solution, on the other it is completely meaningless: all crafting recipes are known, and instead of convenient crafting or searching for recipes, it turns out only uncomfortable memorization or peeping at third sources. We decided to create a beautiful crafting interface in which you will not need to remember anything. We came up with, made a layout, drew a design ... it turned out great! Only one problem: we again hit the architecture constraint.

    New client


    Perhaps the paragraph will not be completely clear to people far from programming graphics, but I hope this will not be a big problem.

    Minecraft client is made on OpenGL without the use of a graphics engine. Even within the client code, there is almost no separation between the graphics engine and logic, which means that OpenGL calls are mixed with the logic code. For those who have worked seriously with OpenGL, it may be obvious that making changes to such code without breaking anything is terribly difficult. You must definitely remember to make popMatrix and other glEnd and glDisable somewhere ... It is not surprising that after a year and a half of my work with such client code, which, moreover, was not written by me, the client began to crumble. It’s just awful to sleep, starting from simple lags, ending with completely strange graphic bugs and crashes.

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

    There was only one right decision: we should start writing a new client. But that’s not all, a new client would not solve all our problems.

    A new game


    Despite all our efforts invested in the development of the project, by now our popularity has significantly decreased relative to our most successful days. There were times when online at 200 people was considered the norm, and now online and on the best days during peak hours barely exceeds 100. The problem for us was obvious for quite some time: we had nothing to offer the players.

    Once we thought that we had a great Minecraft game, all we need to do is to make social functions for a large number of players, such as cities and the economy, get rid of lags, enable a large number of players to play at the same time and we will be successful! For some time this worked, but then people began to leave again.

    The thing was that we did not have much left of Minecraft. Is it that squalid square models, but a changeable world. We did not introduce a large number of Minecraft features that were interesting to the players, we did not have a variety of interesting Minecraft mods. We did not do Minecraft, in fact, we did not do anything. We had a lot of our content, we had a changing world, but in general we did not have a game that people would like to play. All that remains is a social sandbox, which ceased to be interesting to play even for the inveterate oldfags who have been playing with us for more than two years.

    All that was left for us was to make a game. A real game, with gameplay, not just a sandbox. But the main problem was what we wanted to do MMORPG, while not losing our community and the developed world ...

    And on our third birthday (November 1, 2013), in addition to a new client, we announced the development of a completely new game - MMORPG with a completely changeable world.

    Indie developers


    Have you ever thought that large game development companies constantly feed us sequels for a long time to all the hit songs? Assassins Creed XI, Call of Duty 20, Battlefield 9 ... Few large companies allow themselves to do something completely new, of course something more or less new appears when some Blizzard makes a DoTA clone in their own way, but that's all But not a new game concept.

    This situation in the game market, in my opinion, was created due to the fact that game companies are mired in business. When developing a new game, they primarily assess the labor costs of production, promotion, risks; calculate payback and other business things. And only when everything was counted and investors and publishers decided that the project would pay off, development began. All this leads to the fact that it is easier for the developer to release the next CoD with the confidence that they will earn the next billion than to do something interesting. Of course, not everyone falls under such an example ... but almost everyone is trying to minimize the risks.

    In general, it turns out that only indie developers can make their ideas the way they want. They invest only their time in this and are free to dispose of the project as they like. The only problem is that usually indie developers are far from professionals in game dev, and their resources are limited. As a result, we either do not get the game at all, or we get an interesting concept, which with a stretch can be called a game. As an option - some very small game. There are terribly few examples of really large indie projects, and it is not surprising.

    Game design


    We set ourselves, in my opinion, one of the most difficult goals in gamedev: to create a full-fledged online RPG with a completely changeable world.

    It would be difficult for us to abandon the changing world, since we need to save the existing project, and therefore save the players and the world. Otherwise, we would have nothing to eat while we are developing a new game. In addition, it is much easier to start a project when it already has an audience, since there is no need to spend energy on promotion. And this is not counting the fact that the changing world is an excellent “feature” of the game, which is now very popular and is unlikely to cease to be so soon, but there are quite a few really good online projects with a changing world or at least the possibility of construction.

    Fortunately, since we were a Minecraft server, we have experience in solving problems with a changing world, such as: places for beginners, messing up the world, players getting stuck and others - if we didn’t have this experience, doing something like that would be crazy !

    It was decided to do three things at once: I’m developing a new client, Feyola is thinking over the game design, and at the same time we support the existing world together, making minor updates. After the completion of the client, we will begin to introduce new gameplay.

    If someone is interested in what we came up with, then most of the basic ideas are collected here. Just combining good ideas to create a good RPG, as it turned out, is not enough. Thinking through all the details, we came across the fact that everything is terribly complicated. Balance, various little things ... Currently, the details of the gameplay are still being worked out and will be worked out for a long time. We will begin to introduce some things before everything is thought out, but there is still time :)

    Programming


    There is only one programmer in our team - it's me. And although this is actually not enough, I do not know how to work in a team and do not really want to. In general, these are of course my personal problems, but it is worth mentioning that pulling such a project alone (in terms of programming) is very difficult.

    We already have a written server, which means that part of the job is done: you just need to write a client. It would seem that it could be easier having such an experience. Prior to that, I “talked” a lot with the Minecraft client code and was sure that writing a new one would not be difficult, especially on a normal engine. I’ve never been so wrong as they say ...

    The problems of lack of experience in graphics programming started from the very beginning: from a simple misunderstanding of how shaders work and what to do with them, to how I can qualitatively render text on tablets.

    The client decided to write in Java. I have many reasons why Java, and not C ++, for example, you can write an entire article about it, so you should not open a discussion on this subject (Java-haters gonna hate) . But the main reasons are that I know Java well, I can write multithreaded code on it, and everything is written in Java. Using other languages ​​would require much more hours to learn, debug and write code. In Java, you can make productive client applications, and I will prove it :)

    Of course, we had the opportunity to take some Unreal Engine or Unity and write a client in their scripting languages ​​... But this would create new problems: firstly, we would have to deal with licenses and other bureaucracy, the project is still commercial, which means you have to pay someone somewhere, it is often not clear how much and how (Unity, of course, has an advantage over UE in this matter). Secondly, the changing world requires the ability to collect meshes (models) of the landscape at a very low level, which means that access is desirable to the “bottom”, to the engine code, and not to its scripts, even if they are compiled. Again, the problem remains with the study of all the subtleties of the engine.

    I settled on the open-source engine jMonkeyEngineversion 3.0. This is a fully open engine written in Java. It uses OpenGL as a render. Most likely, there are no other Java engines, but this is not a problem: jME has everything you need. To be honest, this is the best library I've worked with, apart from trove.

    Current situation


    Despite the fact that our project is now much less popular than in better times, we are very confident. For four people, GreenCubes is currently the main job: besides me and Feyol, we have a full-time artist and someone like a community manager who is involved in a fairly wide range of work with the community and various small tasks. In general, working with the community is terribly important: at present, several moderators and helpers are helping us on a gratuitous basis, solving players' in-game problems and keeping order, and our forum is a rather large and active community, where they discuss not only our project. In general, there is a certain group of players for whom we have become almost a second life, who have been with us for almost three years. This is pretty nice :)

    Instead of a conclusion


    Of course, I have something else to tell, but the article turned out to be too long already. It will be much better if you just ask your questions: I will answer some at once, some I will single out for another article, which may appear when something that could be shown / told has accumulated. So ask for your answers; if you want me to talk about something specific in more detail - write too.

    The article was not written for advertising purposes; it will not be difficult for me to remove links if they embarrass someone. I just like to write - sometimes it’s useful, it puts thoughts in order. And of course, I hope that someone will find our experience useful. I deliberately do not want to draw any final conclusions or give advice, because I am not an expert in anything I write about, so my advice can only do harm to someone. Except for one thing: use persistent hashes with salt, as well as long and different passwords!

    Many thanks to my friend and colleague Xitaly for editing the text.

    To be continued ...

    UPD: It’s a pity, the post was moved to “I am PR”, here it looks very different. In the original, he was in Game Development.

    Also popular now: