How I became a mobile phone game developer

A little story from how I became a game developer. I will try to highlight the problems that I encountered on my way and share some numbers. I have been working as a programmer for a long time, since 2001, I have been dealing with computers since childhood, but I started playing games only at the beginning of 2014. And the catalyst for this was the article on Habré. Somewhere in early 2014, while reading articles on Habré, I found an article about how one young man made a simple game for VK. A simple 2D airplane battle game. There was little in the article about the game itself, but I was interested in the fact that he was offered to sell the game for 700 bucks. He refused and then regretted, since the game brought him only losses. And this "success story" somehow inspired me.



I wondered if I couldn't make a game like this? Yes, I can write a dozen of them a month. Studying the issue of development for the web, I decided to choose flash, it seems that in that article there was a game just on it, although its decline was already a foregone conclusion. So, I started to master flash, watch videos on YouTube, try to repeat small examples. I didn't have much thought about choosing what I want to do, I want to make my Command & Conquers with my server and units :) I can't draw, so I took pictures from the original game that can be found on the Internet. I thought that if something comes out, I will order art for the game from someone who knows how to do it. When something worked out, I posted vidos and screenshots on my VK page. I don't remember how long I was doing this, but, as I planned earlier,I didn't manage to make a sea of ​​games in the coming weeks. The main work also consumed a lot of time, and I moved very slowly. A little later, my old friend Dima, who is also a big fan of strategy games, offered me help in the project. He gave the project an acceleration. Moreover, as it turned out, he was familiar with an artist who had already participated in the creation of similar projects for the PC. Therefore, he already had developments, models of buildings and equipment.



We talked and decided to make a game together. We had one programmer, this is me, the artist Sashka and the scriptwriter Dima. We agreed on how we would divide the skin of an unkilled bear, came up with a name for the project and got down to work. After a while, we abandoned VK and started making a game for mobile phones. Since part of the project had already been developed by me in flash, it was decided not to leave it, using Adobe AIR, it was possible to write for almost any platform. (A small digression, I am writing about flash, as if I am making excuses, to be honest, I don’t really understand all the attacks on this technology, everyone seemed to be offended by flash together and left it together. I generally like flash, so no more excuses.



Since I had no experience in game development, and the flash community was already starting to scatter, I invented various bicycles, and some of my decisions were, to put it mildly, controversial. I decided not to keep a chronological narrative, remember what was going on, it's already difficult for me, so I will choose a topic and try to tell you how this direction developed in the game.



The game did not differ in some features, all game mechanics were borrowed from various strategy games of the late 90s - early 2000s.



Since the game is made in an isometric style, all the objects used consisted of pre-rendered images. Now there are more than 8000 of them. Sasha often redraws them and gave me sets, often changing the names of the pictures, and this led to the fact that the code had to be edited, and at a certain moment I had to write a separate program that would organize the pictures and write the code. so that these kits can be used easily. This saved a lot of time. Initially there was no fog of war, then I made a kind of crutch out of a black picture, which I “perforated” with ovals, and then I spied on the algorithm for drawing fog in the stratagus engine. The landscape map itself in the game was drawn with one picture. The places where it was impossible to move were indicated on the map in advance. For this, I wrote a certain editor,where it was possible to mark these places with certain rectangles. And already in the game, I loaded them into an array and constantly iterated over whether the unit came across this rectangle or not. Surprisingly, it was very fast, and the maps were compiled with the least amount of given locations. I didn’t know any algorithms for finding a path, and for some amazing reason I decided to invent my own, despite the fact that on the Internet it was possible to google ready-made ones on AS3. When a unit stumbled upon such an invisible rectangle, indicating some kind of obstacle, for example a rock, it began to turn clockwise (in fact, I do not remember which way it started to turn, but it doesn’t matter anymore), I checked if it could go there and kept going, or turned again.Whether the unit stumbled upon the given rectangle or not. Surprisingly, it was very fast, and the maps were compiled with the least amount of given places. I didn’t know any algorithms for finding a path, and for some amazing reason I decided to invent my own, despite the fact that on the Internet it was possible to google ready-made ones on AS3. When a unit stumbled upon such an invisible rectangle, indicating some kind of obstacle, for example a rock, it began to turn clockwise (in fact, I do not remember which way it started to turn, but it doesn’t matter anymore), I checked if it could go there and kept going, or turned again.Whether the unit stumbled upon the given rectangle or not. Surprisingly, it was very fast, and the maps were compiled with the least amount of given places. I didn’t know any algorithms for finding a path, and for some amazing reason I decided to invent my own, despite the fact that on the Internet it was possible to google ready-made ones on AS3. When a unit stumbled upon such an invisible rectangle, indicating some kind of obstacle, for example, a rock, it began to turn clockwise (in fact, I don't remember which way it started to turn, but it doesn't matter anymore), I checked if it could go there and kept going, or turned again.despite the fact that on the Internet it was possible to google ready-made ones on AS3. When a unit stumbled upon such an invisible rectangle, indicating some kind of obstacle, for example a rock, it began to turn clockwise (in fact, I do not remember which way it started to turn, but it doesn’t matter anymore), I checked if it could go there and kept going, or turned again.despite the fact that on the Internet it was possible to google ready-made ones on AS3. When a unit stumbled upon such an invisible rectangle, indicating some kind of obstacle, for example, a rock, it began to turn clockwise (in fact, I don't remember which way it started to turn, but it doesn't matter anymore), I checked if it could go there and kept going, or turned again.



Well, I went to the course again. In fact, he could turn in different directions depending on the situation. It looked terrible, moreover, in order to prevent the players from losing money due to the stupidity of the collectors and the developer, we made the collection of resources using cargo helicopters that flew, and they did not need to go around obstacles. Such wonderful solutions were almost everywhere. I downloaded the content from the server. To do this, I made a server at home, and it was consistently unavailable once a week for several hours, which did not allow new users to launch the game at all. And we decided to publish such a miracle in the Google app store. And somewhere in November, according to statistics, on the 16th of 2014 the game was released on android. The game contained a lot of errors, on some devices it might not start at all, and if it started,could not start due to the inability to download atlases and missions, but, surprisingly, she was warmly received. Many players wrote positive reviews and asked to fix various glitches.



image



Gradually, I gave up my home server and as a repository of content for the game, rented space for the site, bought a domain, and closed the problem with downloads. The artist began to paint a new side of the conflict, Dima began to work on the campaign script. And I decided to make a server for playing over the Internet. In-game monetization was done by annoying ads, but it didn't bring in anything, 50-100 bucks a month. We gave all this “income” to the artist.



image

This is how the income for the first month looked like



Game server



I had experience writing a server in C ++, this is a very simple client-server application using sockets, in which I had 2-3 clients. But then I needed to invent a better bike. I chose C # because by that time I had been programming in it for a long time, as well as Microsoft SQL Server for storing statistics. Googled an example of a server in C #, began to understand the implementation of sockets on AS3 (I will write about flash like this in the future). The idea was simple, my units already had a queue of commands, which they then executed, you just need to add a command to a unit on one device, send it to the server, and the server will send this command to the second device, and back. And also some service functions, authorization on the server, creating a room, controlling versions of the game, the game was very often updated, new units were added to it,bugs were fixed and this required players to play the same version, etc. I was able to write a production server relatively quickly. And, lo and behold! we can play with each other! I screwed up the creation of rooms much later, and at first the players simply could only choose a map to create the game, and the second player had to click join the server, and then they connected and played on the map that the player who created the game chose. And this server was located again in my apartment. Gradually, I brought the multiplayer to a more or less decent look. Now up to 8 players can play on one map, in different versions, up to 3 teams. Also, game statistics and some functions can be viewed on the game site, which I wrote on ASP.net. All games that take place on the server are saved in xml files,which can be downloaded and viewed on the client with several speed modes. I store replays on disk, not in the database, and there are already quite a lot of them. I'm not sure if this is a good idea, but there is no desire to push more than 100 gig of replays into the database either. For winning the game, a rating is awarded, with minor changes, this is a rating calculated by the ELO system. From time to time, I ran into various optimization problems, the need to deal with asynchronous tricks, lack of server space, and much more. And I eventually rented a normal server. First virtual, and then real.with minor changes, this is the ELO rating. From time to time, I ran into various optimization problems, the need to deal with asynchronous tricks, lack of server space, and much more. And I eventually rented a normal server. First virtual, and then real.with minor changes, this is the ELO rating. From time to time, I ran into various optimization problems, the need to deal with asynchronous techniques, lack of server space, and much more. And I eventually rented a normal server. First virtual, and then real.





As soon as the game became rewarding, people appeared who wanted to win using dishonest methods. And we had to do something about it, as it scared off normal players. Therefore, I added the transfer to the server of data about the collected and consumed resources, the number of races of collectors to the base, etc. Added data on unit prices, etc. to the database, so that it was possible to calculate how many resources the player had transferred to the server and analyzed there. And if the data did not agree, he threw the cheater out of the game, and counted the win for the opponent. But the players often surprised me with their ingenuity. Another way that I found is to speed up the game. I don't know how the players did it, in general, the whole game worked faster for them, and the harvesters were collecting faster, and the release of units was faster.I had to calculate the rate of release of units on the server and also punish such cunning ones. However, without emulating the game, it will not be possible to completely prevent foul play on the server. But since the game is not popular, I solve problems as they become available. There are regular players with whom I periodically communicate about glitches, and sometimes I myself play with streams on my channel on weekends. You can always load the game and see what happened in it.



image





There weren't many players on the server. Some became afraid of losing their rating and therefore did not play. It was necessary to add an impersonal player who would not be offended to lose and who could entertain the players. We need a bot. To write a bot, it was necessary to solve a number of problems. If it is easy to write the construction queue of buildings, then finding a suitable place on the map for construction is already more difficult. In offline missions, for example, I pre-assigned places for the AI ​​where it could build buildings. But if the enemy builds everything according to a given plan and puts buildings in the same places, it will not be interesting, something else is needed. And I figured out how to cheat here. I was haunted by the thought that the server stores all the games and they have all the places where the players were already built, playing against each other. You just need to systematize this information and use ... So,Stop. But what if I completely use the construction strategy and release the units of a real player who once played on this map and was in the same place where the bot is now? Will anyone notice such a substitution? And to be honest, I will also control the release of units by how much money he earned. The game itself was not emulated on the server, but worked entirely on the client that created the game, and some points were difficult to understand. For example, the server could not know the exact position of the moving units on the map, information about the position was only at the moment when the unit finished executing the command to go, and a lot of information was still unknown to the server. But I considered them not so significant, it was sometimes necessary to transfer a command to the client to the units so that they attack the nearest opponents. This seemed to me enough.I also added a few tokens to the bot, this is the ability to capture your buildings back if someone captured them by an engineer and did not manage to sell them, the need to restore your buildings if they were destroyed, and many other functions necessary to survive on the battlefield. Surprisingly, the bot took root. Players play with him quite willingly. And even strong players, having a little gape, can sometimes lose to their own tactics, played a month ago against the same bot or a real player, but still we must admit that he does not reach a good player. Now the bot has played more than 311 thousand games, and in 40% of the battles it won.necessary to survive on the battlefield. Surprisingly, the bot took root. Players play with him quite willingly. And even strong players, having gape a little, can sometimes lose to their own tactics, played a month ago against the same bot or a real player, but still we must admit that he does not reach a good player. Now the bot has played more than 311 thousand games, and in 40% of the battles it won.necessary to survive on the battlefield. Surprisingly, the bot took root. Players play with him quite willingly. And even strong players, having a little gape, can sometimes lose to their own tactics, played a month ago against the same bot or a real player, but still we must admit that he does not reach a good player. Now the bot has played more than 311 thousand games, and in 40% of the battles it won.



Paid version of the game



When the artist completely painted the second side of the USSR conflict, before that we had only one - the alliance, we wanted to try to sell it. I don't remember exactly when the purchases appeared in the game, but we also decided to make a paid version of the game, which had no ads and had a second side without a purchase. Many glitches were fixed and even a normal pathfinding algorithm appeared. Picture maps were replaced with tiled maps, which were drawn with standard tools. The campaign was translated into English, already by a normal translator, and not by our own efforts.



image



Now the game has the opportunity to play as Japan, and also recently we added another race "Aliens", this is a separate side where you can play for beetle-like units until the balance is fully adjusted, and they are frankly weak.



image



In June 2015, we launched the paid version of our strategy, and it wasn't bad at all. The game has long been at the top of paid strategies in Russia and in some other countries. And she brought somewhere $ 1000 for the first month. This was the first normal income from games, I believed that this could earn something. For all the time, the paid version on android brought about $ 22K (already minus Google).



image



These spikes, starting from the center of the image, are sales. They used to work better, but now the sales don't seem to make the same sense as they did before, at least for my game.



Localization



Translations are worth mentioning separately. The game now has 7 languages ​​besides Russian. Most of the transfers were made to me by players from different countries, either for free or for a very small reward. It was a very funny moment. Once having logged into the multiplayer server, I noticed a sharp increase in the number of players, literally 10 times. On the one hand, it made me happy.



I looked at the ad display statistics, and did not notice any changes there. Looked at some ip players, they were all from China. I googled and found my game on the Chinese Internet, completely localized. Someone gutted it, translated everything down to the pictures and laid it out. Also, ads were removed in the game, various paid functions were unlocked, etc. I was able to capitalize on this, took the Chinese translation from there and put it in my game! Stole a translation from a game stolen from me. Updated versions and disabled the ability to play old. Surprisingly, the game was very popular in Thailand, although it did not have a localization of 1.3 M downloads. 250 thousand downloads in Thailand, which comes first, followed by Russia with 160 thousand. I will show this graph a little later.



image



Game voice acting



Initially, we looked for free sounds in various free sound libraries, we generated some cues in the menu dubbing with a voice generator. These were mainly phrases in English only. Now there is Russian and English voice acting. Sometimes for the VK version we asked for help with the voice acting of the units of our Russian-speaking players. Then we met Alexei, who later voiced all our games. The process of dubbing one of the games The



music in the game was written by our artist Alexander, and some compositions were written by Yuri (GraYaSDF).



Advertising



While the game did not bring anything but pleasure, there was no thought to advertise it. Then I decided to try it. The mail was full of suggestions from all sorts of bloggers to shove the game into some top review on their channels. I tried this type of ad several times and was completely disappointed. I didn't have any sense from such reviews, and some asked for more money than the game brought in a month. The only thing that really paid off was advertising on w3bsit3-dns.com. There is some kind of program for developers where you can write an article about your game. And this is the only advertisement that really paid off for me. But also, most likely, depends on the game. I did not buy any installations.



image



This is how the game settings graph looks. I could not determine the pattern, due to which the downloads may rise or fall. Growth can occur with an increase in bad valuations, and a fall - with an increase in income and a decrease in ANR. Once, when switching to a new android sdk number, I did not try to install the game on a new device for the test, and there, as it turned out later, it was forbidden to write to the document folder, or a special permission from the user was required. And the game for a couple of days, I suppose, just wouldn't start on new devices. And nevertheless, the game showed a large increase in downloads, unfortunately I didn't have this graph left, but we discussed it in our small team. Sometimes the falls seem to be artificial, this is especially noticeable at the beginning of 2018. They seem to be cut into a certain amount. By the way,many developers experienced this fall.



Other platforms



I also released the game on iOS, and then on Steam. It's very easy using Adobe Air technology. For a while, I even had a browser version of the game in VK. But there wasn't even close to those downloads that on android. Therefore, the main platform for me is android.



My other games



I wrote about one game. In fact, there are already three of them. In fact, they are one, since they are made on the same engine and are already under the warcraft - Warage and dune - Expanse.



image



Conclusion



Releasing subsequent games after the first one, which were already a head and shoulders above the quality and a higher degree of readiness, I noticed that it is not so easy to break into the top of the Google store, as it was with the first game at the end of 2014. There is a lot of content for strategies, but I noticed that adding content does not lead to any growth in installations. Therefore, I have not yet decided whether to improve the existing games or start a new project, whether to study a new technology and whether to continue with games in general. In any case, without even realizing the idea of ​​releasing many small games, it seems to me that I was able to spend the last 7 years profitably, mastering a new direction. And all thanks to that little article on airplanes. I hope my article will be useful to someone, or maybe it will inspire someone to develop games.



All Articles