Memoirs. Development of the first project and publication in Steam. How to (and how not) make games.
I want to tell you a story about how my comrade and I created my first game and released it on Steam. You can consider this kind of benefit to how to (and how it is not) to make games, and what mistakes can be avoided in advance. I recommend reading to those who want to go to the game, while having practically no programming and design skills. Since I acted mainly in the role of a programmer, I will lead the narrative for the most part from this point of view.
So, as is usually the case in such stories, it all started with a spontaneous idea ..
Idea.
I want to note that before developing a game that will be discussed in this story, we tried to develop another multiplayer game. I will not go into details, I will only note that the project is successfully frozen until the best days. But we gained some experience there, so we had an idea of how the process of developing a multiplayer game looks like. The frozen project was originally developed as a graduation work at the university, we successfully defended the diploma, but we could not finalize the game before release to the masses.
By the way, in our universal, Yaro Hitty is connected with games. Because “these are toys, for children who will buy it at all, serious people do not do this”. Nevertheless, we defended the project perfectly, thanks to the top scientist. But in any case, it is sad to observe such an attitude. Despite the fact that there are hundreds of posts from foreign students from specialized forums who have chosen the development of the game as a project. And they have a norm, not a strange exception to the rules.
But it was a lyrical digression (of which there will be a lot, fasten yourself), now let’s continue. Although no, another important point.
Engine.
When we started our project at the university, the first thing we started the selection of the engine for development. We had enough programming experience to know the principles of object-oriented programming, and to write a calculator, but not more than. And all this movement with the graduation project began shortly after Unreal Engine 4 made free for everyone. But such options as Unity3d, Cryengine, Gamemaker(?). Gamemaker was marked immediately, so there is no full support for 3D, and the functionality there is quite deplorable, after all, this is not an engine, but a designer. Cryengine and Unity3D are free and use as the main Japa C ++ and C#, respectively. Unreal Engine 4 is also almost free (5 percent pays with each copy sold), but it has one important advantage – the presence Blueprints Visual Scripting. This is a system that allows you to develop the game actually without writing a code in the usual sense – the entire script is presented in the form of a scheme (graph of the algorithm), which simplifies the work and reduces the threshold of entry. And UE4 also has a pleasant and convenient interface, a lot of tutorials and understandable documentation, an excellent official YouTube channel and an active forum. Therefore, the choice settled on it.
Now we continue.
Summer began, we sat without work, the last project was frozen, I wanted to do something less large-scale, which will be affected by a team of 2 people. The idea with multiplayer air hockey was spontaneously proposed, because the concept sounds elementary, which is quite possible to do over the summer (Spoiler Alert – We did not do it over the summer). And so that not just air hockey, but with all sorts of interesting things. Various effects acted as interesting effects – the box with a random effect appears on the table, the player hits the puck, the puck picks up the box for the player, the player uses the effect on himself or on the enemy, …, profit. Intuition suggested that there are a lot of such effects, and this will significantly diversify the gameplay. The plan sounded promising. It was decided that if I manage to develop a prototype of the main mechanics in a week, then we will deal with the project close.
The main mechanics.
It would seem that it could be easier than making a cue ball that drives a puck across the field, and so that it still works in a multiplayer. And if with the movement of the cue ball, it would seem, there should be no problems, then with the physics of the puck everything was not so simple. There are 2 implementation options – make the puck move from a shock in physics (the impulse is calculated depending on gravity, mass and other physical indicators), or create your own Vonnabi physics, in which everything is controlled by the developer, and you can predict the behavior of the puck after the impact.
By default, in UE4, the physics of objects are not Replica (T.e. not transmitted from the client to the server and vice versa). And make it so that she very accurately displays her position equally on the server and the client – that task is still. And it is problematic to prevent strange and unrealistic behavior, because all sorts of incidents may happen to physics from time to time.
Therefore, I decided to try out the second approach – to create my puck physics. This promised to be sooo pleasant pastime, because I always had problems with physics, exactly as with vectors. It was necessary to make the puck for starters simply bounced off in accordance with the normal blow of a bit, regardless of the speed of the cue ball. And so that she normally ricochete from the walls. In the case of a shock, the method of trial and error, it was possible to understand how the vector of the puck after a blow should be calculated. The benefit of the engine gave out all the necessary information – the normal impact, location, and so on. But in the case of a ricochet from the walls, I had to plunge a little into the vector algebra. Google helped to find the formula of the reflecting vector, it remained only to apply it for my case ..
We had 2 physical objects, 3 shock vectors, 1 powerful diagram of the interaction of these vectors, the formula for calculating the effective vector and mountain of variables, constants and all that, all types of data, as well as the values of speed and acceleration of objects, the desire for an adequate sensation of physics and 2 dozen of the parameters of the puck physics, from the maximum acceleration. Not that all this was needed to realize normal physics, but go to your hobby until the end. The only thing that bothered me was the desire for an adequate sensation of physics. There is no one more helpless, irresponsible and immoral in the world than a person who is trying to make an adequate feeling of physical interaction on the fingertips. And I knew that pretty soon we would dull it.
Of course, before engaging in the physics of the puck, I made a simple movement of cue ball. The player controlled the mouse, and, according to idea, the cue ball was supposed to ride on the screen, following the mouse. But in fact, taking into account the need for replication and the wrong approach, the management was inert and unpleasant. But the prototype was not required.
So, a few days later, we had a prototype of basic mechanics, which I demonstrated to a friend, so that we would make a decision on the further fate of the project. Obviously, it was quite damp, but it was necessary to understand whether anyone would be interested in spending time in the game with such mechanics. It turned out that even in a raw version to ride against a living player is quite interesting. And this is taking into account the fact that we did not have a gate or the possibility of clogging a goal, exactly like a limit on points in principle. We decided that the development is.
Pickups.
It’s time to work out a system of pickups – the very boxes with the effects that were supposed to diversify the game. The system was as follows – the pickup is selected by the puck, through the blow. The effect is given to the player who was the last touched the puck. Then this player can apply the effect either to himself or to the enemy, depending on the type of effect. It can be either a debuff or buff. Examples of debuffs: reducing the size of the enemy cue ball, slowing down cue ball, inverting movement. Examples of Buffs: increased size, protection of the gate from the puck and so on. The set of effects was not limited to such banalities, some options were quite interesting and original. The selection of a new effect replaced the previously selected, that is, the player had, roughly speaking, one slot in the inventory. Also, the use of the effect on himself or the enemy rewritten the previous superior effect, that is, at one point in time, the player again had only one effect. The imposed effects disappeared after the goal. It makes no sense to describe in detail the process of creating this system, which only in theory seems simple, but in reality the multiplayer complicates everything quite strongly. It is important that the system worked, and almost without failures.
Debag and grinding.
Now the development process was as follows – We are developing new effects -> We debate them -> We understand that the system of the curve -> We redo the system. It is important to understand one thing – bugs will always be, and of varying severity, the question is only in the time of their stopping. Another point that is worth accepting – if the system can be optimized and improved, it is better not to be lazy and do it as early as possible. If this facilitates the work in the future, it is extremely desirable to spend several days on remaking what it is already working, instead of spending an extra hour on the implementation of each new gameplay element. Inheritance unrealizes inheritance – without this mechanism it is impossible to make a harmonious system in which everything will be clear and stable to work.
Initially, we only had passive effects. Then we came up with the mechanics of the effects that were activated by the owner through LKM. The first such effect is the magnetto. He allowed him to attract the puck from any distance, wasting the “Stamin”, which gradually restored to the maximum level. Or, for example, such an effect – a shock wave was formed around the cue ball, which discarded the puck in the corresponding direction.
The problem is that the initial system supported only passive effects, so it had to be completely redone, making 2 branches of inheritance from the basic class of effects – passivation and active. Each of the classes possessed its own characteristics, which were transmitted to the subsidiaries. Inheritance in this case is simply necessary, since all effects have similar features, but active effects have a number of features that distinguish them from passive.
I did not regret that I remade the system for competent inheritance, because in the future it saved me a lot of time. At one point, we decided to add pickups that are better not to choose. A red box will subside on the table, when selecting the owner, a negative effect is applied. Thanks to inheritance literally in an hour, it was possible to change the system for a new feature. Also, the inheritance mechanism was useful when changing the visual style – the effects were divided into positive, negative for the enemy and negative for the owner, and the effects of effects were painted green, blue and red, respectively.
By the way, about the nonukcasinosites.co.uk/vpn-casinos/ visual style. While I was developing, my partner was engaged in the creation of 3D models and visual effects. It is not entirely correct to call objects with the effects of “boxes”, because in fact they looked like a translucent distorted sphere in the air. With the addition of a visual, the game was transformed and began to feel properly.
Although the lack of sounds still played its negative role. It is worth noting that we had no experience in creating visual effects, so we had to study the raid. The visual was constantly redone, improved and changed, and, in my subjective opinion, outwardly the game turned out to be a decent level.
The end of summer.
Let’s miss a few weeks and move to August 31. That’s what was ready by the time when we intended to have a ready -made project:
1) the basic mechanics of the interaction of the washer and cue ball, which was felt quite clumsy and looked unrealistic;
2) a worked out system of effects;
3) visual for most effects;
4) the system of the game mode (maximum number of glasses, reducing the number of points after a goal scored, restarting the game, spavn pickups, washers, cue ball and so on);
5) HUD with the display of glasses and effects;
6) Black main menu.
What could we do:
1) finalize the physics of the washer and cue ball;
2) finish all the necessary interfaces;
3) often test the game and fix crawling bugs;
4) add more effects;
5) add sounds;
6) add visual to effects that do not yet have;
7) Prepare for the release in Steam.
Of course, to finalize in a couple of weeks, and it would be stupid to release the project in Steam, so we decided to work exactly as much as it would be necessary, and only then to post out to be publicly displayed.
Autumn lyrical retreat – during joint development, unrealistically solve versions control tools (Source Control). This is such a thing that allows you to store sources in the cloud, updating it in parallel, and without interfering with each other to work on the project. The only problem is that the cloud really does not like binary files, since their contents cannot be compared. This tool is ideal when working with a regular code, but for a visual script, the functionality is limited. You can not work simultaneously with other developers on the same file, whether it is a level, or a separate basic class, if you want all the file changes to be preserved. We used Bitbucket based on Git. Setting up is difficult for non -consolidated minds, but it is quite possible to get a working system in a day. Let’s go back to history now.
Autumn began with the fact that I finalized the mechanics of the washer and cue ball. The result was smashed by your humble gnome with then blood in the dark mines of physical components – now the control of the bit was felt At the fingertips ©, And the puck adequately reacted to the power of the blow, more or less realistically slowed down from blows against the wall, while adopting to play realities was not difficult. I will not go into details, I will only say that all this took a few weeks.
Sounds.
I have never attached much importance to the sounds in games. In AAA projects, this moment is always perfectly implemented, and indie usually does not require. Faced face to face with the task of creating sound accompaniment for the game, I realized all the tremors of being. Find a high -quality sound, without noise, which would be suitable for a visual effect, then reduce it with a visual, level the volume and not go crazy – the task is not easy. Most likely, the right approach is to find a sound first, and then make a visual effect for it, but we are smart, we started from the end. You can, of course, give this task to outsources, the benefit of the studios, but no one will agree to work for a can of stew and thanks. And we did not even have stew banks. You can also buy huge packs of professionally recorded sounds, among which a huge part of the sounds will not come in handy. Or buy sounds on sites one at a time, but it will also get into a penny. Therefore, we were looking for free sounds, drove them under the visual, edited a pitch, duration, stolenly drowned, cleaned from noise and everything was like that. They were versed again on the go, of course. And then these sounds still had to be realized in the game, set up their distribution in the environment, so that it drowned out at a distance, sounded good and worked in a multiplayer.
Steam Direct.
Development went on as usual. With the exception of the moment when Divinity was released: Original Sin 2, after which the whole team of developers practically fell out of the process for several weeks. Despite this, we added a dozen effects, I was engaged in constant bugofixes, and at some point it became clear that there are less bugs, which means you can prepare for Steam Direct. The entire documentation was read several times, the bank account was opened, the TIN was received and the entrance fee was paid to Steam (6k rubles). Next, we filled all the necessary banking information. In Steam, you can register as a developer with an individual, so the registration of the IP went around us the parties. Otherwise, with the tax system, we would have plenty of chocolate. And so the owner of the account repays his 13% income tax and sleeps calmly. And a certain percentage repays Steam’s and Epic Games. If something remains, you can pick up yourself.
Lyrical retreat. How difficult it is to come up with the name of the studio! If with the name specifically this game everything was quite simple (Air Hockey – great for searching for TEG, and not busy), then with the name of the studio more complicated. There were no associations, there were no ideas. As a result, we went to pick up random, good words. Then they reached the name of the songs, because their names sound good, for the most part. As a result, after a couple of hours, it was possible to find a good and meaningful name. Standby. Even a good thing was not bad.
So, after checking the Steam’s all the information received, we were given access to Steamworks. And then we learned that the developer’s icon was removed from Steam, after which we turned the project and scored on Gamdev. The following steps are to set prices, create a page in the store and fill your first shipping book. The selection of prices, as well as a page with a description, trailer and screenshots, we did in a couple of days. After which the build was added, and we sent all this for verification in the steam. Apart from a small incident with redistributions (DirectX and others like it), our page and build were approved. This meant that the release can be put on the date after 3 weeks from the current at that time. Therefore, we put our page to the store, planning to polish everything necessary for the remaining time and get candy at the exit. It was still necessary to add Achivka, to fix the remaining bugs and create menu interfaces.
3 weeks before the release.
The release was scheduled for December 1, and it was decided not to transfer it. Therefore, we had to finish all of the above above. Over the third week, the remaining bugs were featured, and most of the ACHEVKI was added, and Steam Cloud was also configured to synchronize preservations.
2 weeks before the release.
We don’t like that against the background in the game we just have black color. First they decided to add just an abstract multi -colored HDRI, but then changed their minds, and added a full -fledged moving space sphere. Thus, we already had not just air hockey, but space air hockey!
Then my partner painted the interface for the main menu. It seemed to me that it was quite normal, but he did not like, they say, it looks like a cheap flash drive, and not like a full -fledged game. Therefore, we began to invent something else. There was an idea to create a 3D level with a 3D interface, which is built into the environment. That is, the main menu is the screen of the main computer. Settings – a technical monitor on the side to which the camera arrives if you click on the button. Well, and a span to the gaming table for a seamless transition to the online menu. This is what a drawn concept looked like.
And since we have everything with the backwater under Sci-Fi, then HUD needs to be redone. Actually, on this concept we stopped by spending about 2 weeks to implement the level, lighting, transitions and new 3D menu. Compare how it was and how it became below. I can’t help but mention the guys from the Game-Icons website.Net. Without them, our game would look much worse. This is a site with thousands of icons made in the same style, which can be directed directly on the site for your needs. So the authors also do not ask for their work nothing but mentioning them in the project. Just the best.
As they say, what normal developers do 2 weeks before the release? You think everyone is polished, and then they sit calmly in anticipation of the release, doing tests and drinking gulls? No, actually they add fresh. And spent a week and a half spent on the implementation of the level, lighting, transitions and new 3D menus, and then they all finish it, debuggage, do it beautifully so that Smuf and Silk. Having finished, we updated screenshots and trailer in the Steam store, because all this Sveg was absent there.
3 days before the release.
What should happen three days before the release? That’s right, some elusive bug should get out. And better two. Firstly, the players could now find each other in a quick game, although before that everything worked. Secondly, the game began to freeze at random moments. And it can be without problems for several hours, and then in a row several times after a few times. And this is in parallel with the fact that thanks to the new menu, a whole pack of bugs got out, and some Achivka refused to work.
14 hours before the release.
Most of the bugs are filled, but a couple of Achovka still refuses to work. Frizes are no longer observed. But the quick search for the game is still resting.
6 hours before the release.
Judging by Google Analytics, our page in Steam visits a huge number of players. And the game is not ready for release yet. The game hung again. Counting gray hair on my head.
3 hours before the release.
Search for a quick game. Judging by the tests, the game no longer hangs. I make a build, and we test it for a long time and stubbornly. The flight is excellent. But a couple of bugs still remained, although they are not critical and rarely meet.
Release.
The number of views of the page is still growing. I fix the bugs. I constantly fill new builds in Steam, after which I discover new bugs and repeat the process. I breathe deeply, because the worst is behind, because the bugs are uncritical, rarely meet and are easy.
2 hours after the release.
As it turned out, the worst was only ahead. Who would have thought, but, apparently, if not to marketing your game from the word at all, then no one will buy the game! Although there were a lot of views, of course, but no one was particularly interested in. In a few hours, literally 5 people bought the game.
3 days after the release.
The game was bought by a man 20. We naively counted on the number of 10 times more. Spoiler Alert – at the time of writing, the number of sales did not come close to this mark. A month after the start of sales. But back to that time. We actively PR to the game to our friends, the list of contacts and all that way. And a cool discovery awaited us – the game still hangs from time to time. In six months of development, this appeared only a couple of weeks before the release. And with this discovery, we began to receive reviews to the steam. The first review was pleased with us, because the person liked the game, he played with a friend, so he did not taste the dead online. Mentioned a rare problem with freezing, but said that in general everything is not bad. And then 2 more users came with negative reviews. They said the game lags.
Lyrical retreat. People are incredibly stupid. Not all, but there are many of them. Some even me. But it should be obvious that with a large ping to play multiplayer problematic. And especially in the one where the puck can fly at crazy speed. That is, with a ping of 60, it will not be as pleasant as at 20, but what can be expected with a ping> 100? However, people think that they are sitting on the Lana, and the game should compensate for the ping in 0.2 seconds to make everything smooth. In fact, everything works not quite. Even taking into account the smoothness of the differences between the server and the client, this will never be played smoothly. And here the problem is not in the developer, although this. It’s just a restriction that the laws of physics have not yet learned how to circumvent. Although smart developers of engines and not only came up with various mechanisms to mitigize this problem, which, however, does not completely solve it.
And another review said that the game wrote to Fatal Error when starting. And honestly, I still have no idea what it can be connected with. However, the game did not receive any more reviews, just like the records in the discussions of similar ones did not appear, which means that the problem is extremely rare, and most likely is related to the player’s software/iron than with the game itself.
What is a normal developer for 3 days if the sales are low, and the game has a problem with performance? Solves the problem with performance and actively promotes the game. What are we doing? Well, we are not entirely repulsed, so we still fixed the problem with freezes (this was partially connected with Achivka, but this is not important). And completely fixed, pah-pah-pah, they did not encounter it anymore. But about the game we had the next plan. We decided not yet to engage in PR in social media and others like them.
Because we decided to change the pcaps mechanics. Yes, 3 days after the release, and we redo one of the basic mechanics, which worked smoothly and without problems. The idea was that earlier the effect applied to the target was replaced by the old. Now we wanted to ensure that all the effects used were saved on the goals. That is, the enemy can be reduced, slow down, curse in many ways and all like that. Of course, that all this madness was nullified after the goal. But possible combinations sounded interesting and intriguing. It was planned that after the implementation of the system we will make a new trailer, and then we will begin to advance in the social. Media.
I assumed that it would take a minimum of a minimum for the implementation, but it was soon pleasantly surprised by how the existing system was gracefully transformed into a new difficulty without much difficulty. Some functions had to be rewritten, as well as a little remeded the interface to display several effects at a time, but in general everything turned out without problems. The very next day we took up the implementation tests.
Before work on the trailer, several more of our friends played and made up their opinion. And also more information appeared from players, which came from reviews (there were few of them), from notes to refunds (fortunately, there were also few of them), and from the discussions. Everyone asked at least AI, since online is empty, and many have no one to play with.
AI.
Initially, we planned the game as exclusively a phantage, which will be interesting to play only with friends, and Solo players will be able to find each other in a quick game. In reality online lay a dead, and most of the players bought Solo, from which the problem was obviously flowing. Therefore, we decided to do AI.
What happens to a normal developer when he wants to write worthy AI? He reads literature, watches tutors, plans, tests and realizes. What is happening to me? My video card stops working.
Lyrical retreat. The thermal pass on the video card still needs to be changed from time to time, otherwise it offends and stops working. Even if you have more than a dozen coolers on the case and a couple on the video card itself. Fortunately, I was lucky that in the repair for a small price I was fixed by my native GTX780, otherwise it would not have fun to buy a video card for a can of car. After all, as you know, I did not even have a stew of cans.
While my video card was in a hospital, I was engaged in AI on an integrated map. It is worth noting that even on an integrated map our game worked, albeit in 20 FPS! It turned out that dealing with AI is not as scary as I expected. Therefore, two weeks after the release, we released the first big update. This update was 5 levels of complexity of artificial intelligence, a new pickup system, implemented requests from the forum, advanced game settings and bugofixes. We also recorded a new trailer and updated the page in the store.
Some more time has passed, and so I write this huge wall of the text. Maybe it will seem useful to someone, maybe someone will consider it interesting, and most of the audience will simply pass by. It doesn’t matter. Only the result is important. Therefore, let’s go to him.
Result.
For 6 months, it is quite possible to create a good niche game from scratch together. Yes, there is no plot in it, it is more suitable for killing time. But this is a game, it is interesting to play it, and this is not only my opinion. Of course, we knew some foundations and were not completely without experience. Otherwise, this could take eight months, or even more. But, in fact, a full -fledged game was created in a fairly short period of time, the development of which was engaged in two people with basic programming knowledge and 3D modeling. And during this time, invaluable experience was gained. Even if not paid off in the end. At least at the time of writing.
Unreal Engine 4 excellent engine, on which you can fully program yourself without special preparation due to the availability of visual scripting. And you can create a full -fledged game without a single line of code – this is confirmed by both our game and many others confirm. The problem of this approach is that in some cases, performance is very softened (with mathematical calculations, each tick, or on mobile devices with weak iron), and sometimes a set of built -in functions, but then plugins come to the rescue. And you can always write a small module yourself if you really want. And what pieces can you do with C ++ … Yes, the engine is not without bugs and disadvantages, but Epic Games really carry out incredible work on their brainchild. And he definitely costs his 5% with each copy sold.
Multiplayer games are much more difficult to do than single. Firstly, many things are difficult to synchronize between the server and customers. Secondly, it is very inconvenient to test the realized things. Sometimes a second person playing with you is trite. And for this it is necessary to create a new build, to fill it somewhere, and then test with another person. This slows down all processes, especially the debate. And people do not understand how Networking works, and what is a ping.
Multiplayer games are more difficult to sell. Many good independent games are gradually losing online, it is very difficult to support, while a lot of people prefer to play solo. In general, if you have a desire to create an online game – think through the promotion strategy in advance, gain a group of interested people, so that at first your game is not empty, thereby not scaring ordinary players. And it is extremely desirable to add AI, in case something still goes wrong.
Steamworks has wide functionality, and getting there is easy. Passing Steam Direct is not difficult. Steam provides developers with tools with which you can track the audience interested in your product and engage in promoting. And the first month after the release, your game is actively advanced by the internal mechanisms of Steam, displaying in the recommendations to those players who are interested in similar tags. There will be a lot of views of the page, the main thing is to still buy. Or added to the vivillist, which is also not bad. And numerical indicators associated with this can also be tracked on your own.
Promotion is extremely important. Regardless of the quality of your game, it will pass unnoticed by players if you do not think about it in advance. Social media all. And if there is a budget, then you can promote the money.
There are bugs and dissatisfied players in all games. Even in a god -like Witchker. It is just necessary to accept this as a fact, if there is a desire to engage in gameds, and, no matter what, to continue to make your project better.
And also There are people who are ready to help. The guys, whom we barely knew, did not ask for anything in return on our game. At the same time, they did it objectively and efficiently. And in every possible way helped with advancement. Plugins for UE4 that we used, wrote a person who did it for free. And the result of its work is used by thousands. There are a lot of free music and sounds on the Internet, which are laid out there on Attribution License (can be used in commercial projects, with the mention of the author).
And most importantly. Gamdev is cool. It doesn’t matter what project you want to do. The main thing is to do this for the sake of an idea, and not for the sake of receiving money from a cheap craft or copy -paste of other people’s ideas. Any project is primarily an invaluable experience, which in the future will definitely be useful. All masterpieces began with small.
Leave a Reply