📜 ⬆️ ⬇️

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

Greetings to you, dear Habravchane!

In this post, I would like to share with you the history of the development of your game project “GreenCubes”, I hope it will be interesting for you, and for someone it will even be useful. I think this article can be useful to those who are starting or have recently started some kind of game project, because someone else’s experience should always be taken into account. I will talk about how harmful it is to depend on the decisions and services of others, how to do everything yourself and that it is not harmful to dream. Currently we are 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, most likely for friends of friends of friends, because we used to play with friends before, but this time we decided to start on a more or less regular basis and not to filter the incoming people much. 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 broke up with our old world and started all over again, seriously and even without admin commands.

Friends brought friends, some of them started organizing streams - people began to move swiftly (by the standards of the time). Literally weeks later, the project began to require us to work: suddenly, from a simple server, where we planned to play with friends, GreenCubes turned into a server, which we also 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 wite list or, for example, reducing the limit online, so that the server would not fall (it was then standing on the window :)) before administering the servers on Debian, writing your own server plugins and creating a full-fledged website.
')
Before that, I was able to do sites, 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 plug-ins and programming in Java, working with the community. Pretty quickly, we decided that we should start doing this seriously and try to make money on the project. The prospect looked foggy and even doubtful, but it was worth a try. At least, free time was enough.

Challenge


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

After that, we were faced with the need to create a full-fledged website for the project, with registration and other buns. Having run through all kinds of CMS, I stopped at the idea to remake one of the DLE clones to fit our needs. A familiar beginner designer threw us the layout of the site and forum, I quickly folded it and picked it up, screwing up the work with the authorization database on the server.

Who knew that the engine had a security hole: he made backups of the base and put them in one of the directories of the site where the attackers could find them. Somehow, magically deciphering the password hash, the attacker not only flooded the site and the forum with unpleasant messages, but also broke into the Feyols mail and the host’s control panel ... This story ended very badly and only a year and a half ago: one person from the hackers campaign just annoy 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 elementary safety principles, but for some reason you don’t always think about them until one day everything becomes very bad ...

Covering all the holes and pretty nervous, we continued this difficult task. The next time we were hit in the back by the author of a Minecraft server plugin called “hey0” —a server modification that allowed us to write Java plug-ins for it. And the author of the plugin did this: he wrote, “I'm tired, I'm leaving,” simply stopping the plugin’s support completely. At the same time, CraftBukkit was born - an alternative modification that was the replacement for hey0. But under it there was no authorization plugin that was very important for us! So I had to write it myself.

And 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 on the development of the server through it.

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

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

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

Having accumulated by that time Java programming experience, we have imagined ourselves to be “strong” programmers who can, if not move mountains, then at least fix the bottlenecks in the server so that it becomes more productive. Unfortunately, we only shattered the server, because of our "corrections", he began to slow down even more and sometimes even fell ... I can't say that we did not achieve the result at all: for example, we managed to transfer the operation of the stoves for seconds instead of server cycles, which improved the game, since it was not necessary to wait hours of ore melting (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 do not change something drastically, then our project is the end: we cannot reduce the limit online, we cannot leave the server to lag, and even more so we cannot increase the limit . The queue of entry to the server was already huge (relatively online), people complained about lags and a long queue, left the project.

Greenserver


After another attempt to figure out how to rectify the situation, on March 21, 2011 we came to a fateful decision: in order to continue to develop, we need to write our Minecraft server. This is how the GreenServer originated.

Looking back, GreenServer was probably the most naive task of all that we set ourselves. Neither I nor Feyola had enough experience 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 to say lately, "I have never been so wrong."

By the end of May, I not only did not have time to finish everything - all I had time to do was make a terribly buggy test version with almost no functionality. I was sure that I would finish everything for at least another month, I would do everything in the official Minecraft server and our plugins, and we will go further. I was again very much 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), it also constantly fell, not to mention numerous errors. For the first two days, we fixed them just a lot, and somehow switched from the Alpha version to the Beta version, which should have meant at least stability. Then we decided that by the end of the summer we had to finish everything that we had lost during the transition and move from the Beta version to version 1.0. Should I say that the server is still on the Beta stage?

We released 3-5 updates per week, but still did not have time to complete the deadlines. Move the mobs from the original Minecraft code did not work because of the huge differences in architecture, and in the meantime the server had more and more new bugs ... We had to spend the whole autumn of 2011 in order to make GreenServer stable, but it was worth it! The server was able to pull over 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 effort was worth the result. Perhaps we had the world's first full-featured Minecraft server, though not with full functionality, but supporting a huge online and official client of the latest version.

Though in a reduced form, by the time it was already ready, we introduced a lot of functional animals in the summer (we don’t have aggressive ones so far), but we still don’t return completely lost functions (and decided not to return them). quite, but I'll tell you about it below).

Customer


At the time, we were hauling a Minecraft client. It was slightly modified with plugins, but we always switched to the newest client of Minecraft. The only difference from our competitors is that in fact from the new version we had only a figure. Most of the features of the new versions of Minecraft did not support the server, and we did not enter them either intentionally or due to lack of time. However, we still implemented some functions, for example, we quickly made the pistons entered in Beta 1.6, immediately thinking about how people can grind buildings and introducing the necessary protection measures. Many servers after this update seriously suffered from griefers, but not us. We have learned to think that if one player somehow can spoil the game to another player, he will definitely try to do it. Of course, not every player, but in a more or less open community, there will definitely be people who will want to harm him.

After that we decided to introduce our ideas, our content. We realized that it was no longer possible to keep the constant, senseless updates of the Minecraft client and decided to stop updating the client and introduce 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. Minecraft has had different paths since that moment.

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

Made such serious architectural changes as an extension of 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, Minecraft mods with such functions were long before we did them, but we were the first really large server that had this functionality.

Newbies


Then we believed 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 rightly our pride (the metro itself was completely built by the players, by the way), made a system of Organizations that helps to 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 at the same time introducing quite a lot of new content. Significantly facilitated the registration and the beginning of the game on the server. In general, the question of newcomers to the game is very big and serious. You should always think of it when you start creating a game. You need to be aware of how newcomers get into the world of the game, what they will do in the beginning, how they will 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 newbie entry into the game ... We didn’t even think about it at the very beginning. Do you know that almost no one wants to complete learning quests? We did not immediately recognize this.

We realized that our game is too difficult for a beginner. Even in spite of all our efforts, it was terribly difficult at first to play without first reading several guides and without at least supporting Wikipedia with a list of crafting recipes. We realized that we first had to completely change the craft. We use Kraft as in Minecraft, in which all recipes need to be remembered or spied. Of course, on the one hand, this is an interesting gameplay solution, on the other - completely meaningless: all crafting recipes are well-known, and instead of conveniently crafting or searching for recipes, it turns out only awkward memorization or peeping into third sources. We decided to make a beautiful crafting interface, in which you will not need to memorize anything. Invented, made a layout, painted the design ... it turned out great! Only one problem: we again hit the boundaries of the architecture. This time the client architecture.

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.

The Minecraft client is made on OpenGL without the use of a graphics engine. Even within the client code, there is almost no separation in the graphics engine and logic, which means that the OpenGL calls are intermixed with the logic code. For those who have seriously worked with OpenGL, it may be obvious that making changes to such code without breaking anything is terribly difficult. It is necessary to not forget somewhere to make popMatrix and other glEnd and glDisable ... It is not surprising that after a year and a half of my work with such a client code, which also I did not write myself, the client began to crumble. It's awful to crumble, starting from simple lags, ending with completely strange graphical bugs and crashes.

It became obvious to us that making a new interface in an 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 energy on its programming, it will either slow down or it will be filled with strange bugs, or it will not start at all even on very powerful computers.

The correct decision was only one thing: we have to start writing a new client. But this is not all, the new client would not solve all our problems.

New game


In spite of all our efforts invested in the development of the project, by now our popularity has declined significantly relative to our most successful days. There were times when online in 200 people was considered the norm, and now online and on the best days during rush hours it barely exceeds 100. The problem for us has been evident for quite some time: we have nothing to offer players.

Once we thought that we had a great Minecraft game, all we need is to make social functions for a large number of players, such as cities and economics, get rid of lags, allow a large number of players to play at the same time and we will be successful! For a while it worked, but then people started leaving again.

The thing was that we didn’t have much left of Minecraft. Is that miserable 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 changeable world, but in general we did not have a game that people would like to play. All that remains is a social sandbox, which has ceased to be interesting to play even to avid oldfags, who have played with us for more than two years.

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

And by 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 about the fact that large game development companies constantly feed us with sequels to a long time ago? Assassins Creed XI, Call of Duty 20, Battlefield 9 ... Not a big company allows itself to do something completely new, of course something more or less new appears when some Blizzard makes DoTA clone in its own way, but that's all not a new game concept.

This situation in the gaming market, in my opinion, was due to the fact that gaming companies are mired in business. Developing a new game, they first of all estimate labor costs for production, promotion, risks; calculate payback and other business things. And only when everything is calculated and investors with publishers decided that the project will pay off, will the development start. All this leads to the fact that the developer is easier 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 this example ... but almost everyone is trying to minimize the risks.

In general, it turns out that only indie developers can do their ideas the way they want. They invest in it only their time and are free to dispose of the project as they like. The only problem is that usually indie developers are far from professional game developers, and their resources are limited. As a result, we either don’t 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. Examples of really large indie projects are terribly small, it is not surprising.

Game design


We have set, in my opinion, one of the most difficult goals in game development: 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 preserve 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 it does not need to waste energy on promotion. And this is not counting the fact that the changeable world is an excellent "trick" of the game, which is very popular now and is unlikely to cease to be so soon, but there are very few really good online projects with a changeable world or at least the possibility of building.

Fortunately, since we were a Minecraft server, we have the experience of solving problems with a changing world, such as: places for newbies, fouling the world, players getting stuck and others - if we didn’t have this experience, doing something like that would be just insane !

It was decided to do three things right away: I develop a new client, Feyola thinks over the game design, and in parallel we together support the existing world, making small updates. After the completion of the client, we will begin to introduce a new gameplay.

If someone is interested in what we have been thinking about, then most of the basic ideas are collected here . Just combine good ideas to create a good RPG, as it turned out, is not enough. Thinking through all the details, we stumbled upon the fact that everything is terribly difficult. Balance, various trivia ... Currently, gameplay details are still being worked out and will be worked out for a long time. We will start to introduce some things before everything is thought out, but there is still time before that :)

Programming


The programmer in our team is one - it's me. And although this is actually quite small, I don’t know how to work in a team and I don’t really want to. In general, these are of course my personal problems, but it is worth mentioning that it is very difficult to pull such a project by one (in terms of programming).

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

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

The client was decided to write in Java. I have many reasons why Java, not C ++, for example, you can write a whole article about it here, so you shouldn’t open a discussion about it (Java-haters gonna hate) . But the main reasons are that I know Java perfectly well, I can write multi-threaded code on it, and everything is written in Java. Using other languages ​​would require a lot 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: first, we would have to deal with licenses and other bureaucracies, we have a commercial project, it means that someone needs to pay somewhere, it is often not clear how much and how (in Unity, of course, there is an advantage over UE in this matter). Secondly, the changing world requires the ability at a very low level to collect meshes (models) of the landscape, which means access is desirable, preferably at 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 stopped at the open-source engine jMonkeyEngine version 3.0. This is a completely open engine written in Java. As a render uses OpenGL. There are probably no other Java engines, but this is not a problem: jME has everything you need. To be honest, this is the best library I have worked with, not counting trove.

Current situation


Despite the fact that our project is now much less popular than in the best of times, we are holding very confidently. For four people, GreenCubes is currently the main work: in addition to Feyol and me, we have a full-time artist and someone like a community manager who is engaged in a rather large spectrum of work with the community and various small tasks. Generally, working with the community is terribly important: currently, we are donated by several moderators and helpers who solve the game's game problems and keep order, and our forum is a fairly large and active community, where not only our project is discussed. In general, there is a certain group of players for whom we have become almost a second life, who has been with us for almost three years. It's pretty nice :)

Instead of conclusion


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

The article was not written for the purpose of advertising, it will not make it difficult for me to remove links if they embarrass someone. I just like to write - sometimes it is useful, it puts thoughts in order. And of course I hope that our experience will be useful to someone.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 to someone can only be harmful. 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 promoting", here it looks quite different. He was originally in Game Development.

Source: https://habr.com/ru/post/209234/


All Articles