Seven iterations of naivete or how I wrote my debut game a year and a half

    imaginationWith the advent of Dendy in my first grade, the question of who I would become disappeared by itself in just a couple of weeks - of course, the programmer. For a long time and hard I went to this, despite the lack of computer science at school, I worked in the technical support of a well-known registrar in parallel with studying at the institute, but a full life began only at the moment when I was finally taken to write code somewhere.

    Very soon, I realized that it’s not enough to be a programmer working from call to call and getting money for a card for it - all the fun begins when you decide to write something and make it work without any architects, testers and team leaders. Something fun and exciting is desirable. A game, for example.

    Under the cut, there are seven of the most obvious (as it seems to me now) rakes, which unexpectedly got in my way, and therefore are capable of a non-zero probability of getting in the way of anyone going expensive game development.

    All my life I played computer games. Started back in those days when a dozen of them fit on a single floppy disk 1.44 Mb. I never understood those who say that games are a departure from reality and a reason for too much imagination of oneself that does not exist in reality. In my opinion, games are concentration training, incitement to the thirst for knowledge, practice in resource management, and a determination simulator. It is not surprising that already in the first grade I knew exactly who I would become - a programmer. And I became one.

    Over the past few years that I managed to work in my specialty, I met a lot of interesting people. For some reason, for the most part, two programmers who had nothing to do with each other fell into my soul; both of them passionately dreamed of exploring mobile platforms, and then writing their applications. As each of them honestly admitted later, neither one nor the other has ever played games, do not play, are not going to play, and generally find this occupation stupid for kids. To my quite reasonable question (asked almost at the first meeting) what are they going to write when they finally realize that they are ready to start developing their own project for mobile platforms, both without a shadow of doubt said: “games, of course.”

    I also always dreamed of releasing my own game. And if someone told me 20 years ago that in the future it would not be necessary to have a whole holding to do this, I would probably play less and do more.

    A lot of time has passed since the advent of the mobile application market. But while I lived in the suburbs, I always had more priority classes than exploring these same mobile platforms and releasing an application for at least one of them. First, I saved for a long time on the phone on android 'e, ending my studies at the same time and not forgetting to play in Starcraft II , then in Tropico 3 ; then everything was absorbed in the work of the developer in various companies that have nothing to do with the mobile market, and he always sat in the eveningsWorld of tanks . And then one day a miracle happened that I had long dreamed of - my six-month-old son and his mother moved from the Moscow region to a Karelian village with a population of 3 thousand people, and began to work remotely. Released 4 hours previously spent on the road, it was decided this time not to waste.

    Concept


    Of course, I decided to start with something simpler, so I chose playing cards for my venture - they are almost an ideal OOP simulator. Java by that time I knew, but for some reason it turned me off from any C- language, so it was decided to release the application for Android . Moreover, I did not really trust the emulators, and my only physical device was HTC Explorer with android 2.3.3 on board and 20 MB of free memory.

    Rolling up my sleeves, I climbed into the market to watch and compare competitor applications. I admit, the first impression I had was that all these games are made by the very same comrades of mine - people who have little interest in games. Well, or small offices where the director has extraneous income and so that the capital rotates, he decided to release applications, since it is now in the trend - he hired programmers and, consider it, you're done. With rare exceptions, all the games even looked like screenshots of twin brothers - the invariable green background and hackneyed pictures on maps are exactly like the real ones.

    I read several dozens of articles on the hubr about how someone wrote their debut games and noticed that most often the scenario of a beginner igrodela looks like this: he (and in the near future - I) takes for himself some simple projection such as tic-tac-toe or sea battle , of which in the market, and so in bulk (yeah, the person who decided to make the next card game) said, does the same thing as everyone else, changing the colors to orange and light green (no one has that!), then posts the application to the market and suddenly discovers that no one needs his game. Igrodel is perplexed - after all, he spent his energy, did not sleep at night, picked up the colors and secretly even allowed himself several times before going to bed, with his eyes closed, thinking: “maybe he will take off?” He is already irrevocably and passionately in love with his game (and how can he be different?), forgot about

    At that moment I had absolutely nowhere to hurry, I calmly worked at my work, and decided to deal with the project in the evenings and on weekends. I decided not to write any prototypes “easier”, but immediately make a game for which it would not be embarrassing and which even if it doesn’t take off, in the future, dug up by the fans of my 10th / 79th / 133rd game, it will immediately demonstrate the fact that I’m from the first he tried to do something special. It took me just a few weeks to think about what would be beneficial to distinguish my card game from others. The decision, when I found it, turned out to be much simpler than you could imagine - I just decided to make a game that I myself would love to play (the cap approves).

    I downloaded a bunch of "Fools" to myself and played them well. It looked like this: A new game begins. We put cards, we take cards, we put, we take, we put, we take, we do our best to win. Won - cheers! Lost - alas. Repeat ad infinitum.

    Who played WoT knows that very quickly there the battle itself fades into the background, giving way to the game of pumping military equipment. The joy now comes not from the victory in the next battle (although this happens), but from the purchase of a new tank. Imagine for a second that all the tanks in this game are available from the very beginning and anyone can choose. Interesting to play? I don’t think so.

    So here - in the same “Fool” for the sake of victory, I want to play only the first ten matches, then - I get bored. The conclusion is obvious: you need to give money for victories. But where to spend this money is another question, which, by the way, still torments me and to which I still find new and new answers.

    You can allow a person to buy new shirts for cards and new backgrounds for card skirmishes with this money. Will it be interesting to play? Well, it’s not so boring as “just like that”, but it still doesn’t pull on the hit.
    But what if I do not like to play “Fool”, but “King”? Here it is!
    I came up with a collection of card games in which for every victory you get coins and you can open new card games for these coins. It smelled of something right. Moreover, the top collection of card games looks exactly like that, only there you need to open new games for real money.

    Now it was necessary to determine the number and composition of the games. At least for the first time, before launching the application.

    "Fool," of course. This is the most common, the most, in my opinion, favorite game in our country. We in the village often spend time with friends at this game and a teapot of green tea.

    King, of course. We also play it sometimes. In addition, as a child, I ran into this game under MS-DOS , competing with the heroes of Soyuzmultfilm (Vadim Vladimirovich,PapaBubaDiop , my respect)

    There was another solitaire game that I played — couldn’t — play enough ten years ago on some foreign flash portal. It was called the Pyramid, but the official solitaire rules with that name are at odds with the game I played. In my game, to put on top of the current card in the deck you need a card from the pyramid older or lower in value by one, as a result of which, with a certain dexterity and luck, you can demolish half the pyramid in one turn. By the way, there was one major problem with that game ten years ago: its logic was processed on the server side and therefore, after each click, the page was reloaded (now I have a suspicion that it wasn’t flash - it was some kind of meager). This game terribly dragged me then, but it was also terribly annoying because so much time was spent on one game. I promised myself at that tender 17-year-old someday to write myself the same, but without brakes. And gestalt, as you know, must be closed.

    I began to actively read on the Internet a wide variety of materials on card games and the cards themselves. I picked up the themes of suits for men on the cards, tried to dig into the history of the cards themselves and understand why I am so ashamed to admit to anyone that I am making a card game. I don’t know how much it is just with me, but in my opinion card games are considered some kind of fairly marginal fun inherent in not the most successful sections of our society. However, more on that later.

    After reading about “The Fool” on Wikipedia, I was delighted with the number of modifications to it (now the article has already been edited, there are no more modifications, but there were 50, no less) I decided that I should by all means make at least the most interesting ones for him. I looked for analogues of “Fool” in the market, preferably with a bunch of Wikipedia modifications, but I found only one such “Fool”, and then the modifications there were firstly for the most part paid, and secondly it was possible to activate no more than one modification at a time . But mixing them together is the most interesting! Having rolled up my sleeves, I decided to select the most interesting rules (of which there were more than 20), and also did not fail to add my own, which is something to be ashamed of. It was planned to buy them, naturally, also for the money won.

    In general, from the very beginning I decided that I would not be like those who installed the games on the podium of their way of survival and therefore had to take “100 lira for heavy rain, 200 lira for heavy rain, and 300 lira for thunder and lightning.” “After all, when a writer writes a book, he thinks about how he will monetize it, for him (as for me in this case, because I’m directly a writer, yes, a creative person, here’s the help) the most important thing - it is self-expression and creative impulse.
    In such a situation, it would be possible to make the game completely free - without ads and in-app purchases, but in this case I would deprive myself of the pleasure of delving into the in-app purchases and cross-screen advertising API, and I would also bypass the whole aspect of developing mobile games called “monetization” ". So I tried to maintain a balance - playing should be quite comfortable and without donation, but if suddenly someone wants to support the developer and buy something - I'm just glad. At the same time, in purchases there is no restriction on functionality, only time saving.

    One feature in the form of rewards for victories is good, and two are even better. I did not deny myself the pleasure of dreaming about what else could be changed in card games so that I liked them more. I tried to get to the bottom of the pleasure of this intellectual fun, and once, having played hundreds of games with friends in the village, I sat down to play at the table with the grandmother of my girlfriend, who lives in Moscow. I was amazed at how much the game has changed. Instead of the warm and friendly atmosphere of tea drinking, there was some kind of rivalry not for life but for death, and each victory or loss was literally perceived as a triumph or insult, respectively.

    At that moment, I realized that playing cards is also, oddly enough, communication. There wouldn’t be such an abundance of our evening gatherings if we hadn’t diluted the fights with conversation and jokes, didn’t eat fruit in parallel and didn’t listen to any music. I immediately remembered Mario's Game Gallery and Wild Board Games , where opponents commented aloud what was happening on the board or table. What could be nicer than the exclamations of a victim cornered?

    Thanks to Mario, by the way, I remembered another interesting game that I played in his gallery - Go Fish!In Russian, this game is called "Chests" and in our country it is played in a slightly different way. The essence of this fun, if anyone does not know, comes down to guessing if the opponent has cards of a certain value. Guessed - get them yourself. No, it’s your opponent’s turn. And while abroad they simply guess the value of the cards, we still need to name their number, color and suit.

    I decided that in my game opponents will talk, commenting on what is happening at the table. Nobody had such a thing and was drawn to a truly exceptional product. Now is the time to come up with - who will these opponents be? I started thinking about who they usually are - people playing cards. Professional gamblers. Senior citizens. Shpana street. Students at the lecture. Aristocrats with cigarettes in the mouthpiece. Homeless on a bench in the park.
    I would like the game to have the stinking and gloomy spirit of an underground institution, a near-colonial style as in the board game " Overboard ". And I also wanted a well-aimed and catchy name for my game, almost a trademark; a name for which I would not be ashamed and which I could proudly pronounce. And after several days of painful deliberation, I found it - “Cartridge House”.

    The scope of this venture caused skepticism among those to whom I tried to describe it in a nutshell. After all, if this is not in the market, then this is not so easy to do, is it? “Yes, you will write your game for years,” they told me. “Throw it halfway.” All these concerns for me and my idea could be understood. I myself could only repeat to myself that I had no place to hurry, that I had siege tactics, that I didn’t quit my job, I just decided to replace the nightly pokatushki with tanks by development.

    The first iteration of naivety: no graphics


    I had the first iteration of naivety with the first version of the game, which took about two to three weeks. I worked on the project in my free time from work and home affairs, and in the conditions so far only studying the platform, the work went on and was barely possible. Well, if in the evening I managed to make at least one completed game function.

    By the way, I don’t know how to draw. At all. Go into details, explaining how bad everything is. I don’t see the point, because I look like that - many programmers have this feature. So I decided that I would write pure functionality, and then fasten the graphics. The cards in my hand became my list of buttons in the form of LinearLayout , and everything that happens was a TextView with a brief description of the moves made.

    I understand that this is complete nonsense and it is unlikely that anyone will ever have the brains to do the same - anyone understands that they need to be drawn with at least gray pictures. On the other hand, if I had such an idea in my head, that is, there is a non-zero probability that the same thing will happen to someone else. Here is my advice to people like me a year and a half ago: don't do this. You will have to re-rotate the entire control module, catching where the user clicked and determining what he wanted to say. You will have to enter delays between input processing and the execution of the corresponding response in order to wait for the end of the animation, which you do not currently have. Given that all this will have to be done, tearing and sewing ready-made code, believe me, it will be painful.

    I was lucky to realize this early enough and not to redo the pieces of the existing code, but just to erase everything and start again at the moment when I realized that in the process of the attack it was necessary to give the opportunity to go with several cards. Any decision in this situation in terms of cards in the form of buttons would be doomed - it would not be included in the final release, but time would be taken.

    The second iteration of naivety: I will do everything perfectly, and the controversial - I will put it into the settings


    This iteration actually combined my two naive points of view at once. What they have in common is that both errors are described in Alan Cooper's book, A Mental Hospital in the Hands of Patients. Therefore, the most general advice would be - read books on development and near-development topics. Many, many mistakes that you make or intend to make are discovered by someone a long time ago, you just need to pick up a book and let this someone warn you. In addition, it is a great entertainment to listen to those who understand your trembling hands and sleepless nights in an attempt to create a masterpiece.

    However, first things first.

    I did not mess with android templates, but decided to do everything on a blank canvas'e, dividing the program accordingly into two streams - the control stream and the rendering stream. I can explain my choice by the fact that I dreamed (and never got to that) of introducing visual curvatures in the game, and for such an approach, the standard appendix markup, it seemed to me, didn’t fit in any way.

    When the third time I finally began to get something, I drew an empty card and began to display its color and meaning on it. My success turned my head. I decided by all means to do everything so that people gasp from the convenience and ideality of my game. I had never held a single Apple device in my hands by thenbut I heard from several people that everything is amazingly comfortable and organic. Having decided to make everything worse (and even secretly dreaming that people would switch from bourgeois Apple to Android just for the sake of my game (ha ha, ha)), I decided that I didn’t need any “Take” or “Bito” buttons . Simply draw the cards on the table towards you or to the side, respectively.

    I tried to make the game as realistic as possible - I even thought to get the loser to shuffle the deck with his hands and deal cards, but I decided to postpone this thing for later. But what I really did was that the cards were put anywhere on the table. As a result, of course, a situation arose when later cards lay on top of the already beaten ones. I debugged a mechanism to prohibit this action for a long time, but realizing that sooner or later a computer could still inadvertently do so (in case two people immediately pop up cards by choosing the same final coordinates of the animation), I added the ability to click on any card, why she popped up no matter how many cards were already.

    It took me quite a lot of time to do such little things, about two months. I tried to bring the simplest “Fool” to a state of ideality before moving on, although there was still very, very much work ahead. From this, the code of the class responsible for rendering and the code of the control controller on the part of the player grew.

    Later I read about this feature of programmers at Cooper. He writes that if there is even a very small probability that an event will happen, programmers always spend time trying to do something for this situation. Even if the probability of the event is one in a hundred million and it is nothing more than a mild inconvenience, and the time to develop the code specifically for this case will take two weeks, the developers still strive to cover all events that have a non-zero probability.

    This, of course, is another stupidity on my part - a short-sighted and stubborn obstinacy. Considering that I had to screw a whole bunch of modifications on the drawing and the "Fool" control, I should focus primarily on these modes, and only then on some special and rare cases of control and rendering. My approach, however, was contrary to the Pareto law, which urged (in my free interpretation) to focus on the most important aspects first. As McConnell said in "The Perfect Code": "The sculptor always first creates a rough form of the future sculpture, and only then it is taken for details. Taking on the first part of the details, you risk either in the course of further development to throw out the code that you worked on longer than necessary, or - even worse - leave the bad code in the project, regretting it,

    Could my users play Fool if they sometimes had lower cards being closed by the top? We could. Could they play the game I had conceived if there weren’t any modifications of The Fool in it? No, you could.

    Therefore, my third advice to myself and to others like me (the cap is proud of me): focus on the main thing, it's never too late to screw things up. If you are afraid to forget about this feature or feature - write yourself somewhere.

    Here, in the same iteration, I will put my terrible habit, which I almost got rid of, in all controversial issues, provide the user with a choice in the settings. In my case, everything is even worse, because I interpreted any split in the interpretation of modifications as a new rule.

    So, for example, in Podkidnoy, attacking cards should be reported on the table first to the attacker, but if he has nothing more to report, other players report clockwise and in strict order. In life, I saw completely different conditions - cards were laid on the table all in a row, not observing any queues. Who managed, he ate. Which option is better? Yes both! So there was “Podkidnaya” and submodification to it - “Soviet” (when strict ordering is observed when tossing). However, this is not the worst case.

    Most of all I am ashamed of the “Empty” “Fool” (cards are taken from the deck only if there are no cards left at all) and its submodification “False” (cards are taken immediately as soon as they are over). I simply could not decide how best and could not find anywhere information about at what point the cards were issued - immediately after they were finished in my hand or at the end of the turn. “Ok,” I decided. “Divide into two modifications.” Shame and shame.

    Later I read about this with Cooper. He claims that developers are inclined to put any contentious issue into the settings, but this is fundamentally the wrong position - if the creator of the program can’t decide how best, then the user will definitely not decide this question.

    And I was once again convinced of this when I recently discovered that in the classic 2048, in the settings it turns out you can select the 5x5 field. Frankly, I usually go into the settings in any game. But in mobile applications, everything is so swift, so often you get your phone for some five minutes while you wait for something that is not up to the settings. Therefore, developers who do not know how to do better, and decide to do both, and so, and provide the choice in the settings, here is my appeal to you: you still make this choice, choosing the default state. Whether or not to provide an alternative is up to you, but remember that most people will most likely never get to the settings and the alternative.

    Third iteration of naivety: I took up the largest piece at once


    Six months have passed, I finished "Fool" with all 40 modifications and submodifications that I chose for myself. Vacation began and I spent all of it, debugging and bringing to mind this cuttlefish. At the same time, the accumulated tired made itself felt - sometimes, if I saw a mistake, I just inserted another if , without delving into the essence of what was wrong here, I wanted to finish it as soon as possible. By that moment, I had some problems and was about to release the Fool alone with modifications.

    By this time, the classes of "Fool" had grown to incredible sizes, became shaky and heaped. I calculated that, taking into account all the restrictions on combinations of modifications, the number of rule options is more than 11 billion combinations. Naturally, testing all the options was out of the question. Therefore, the well-known paradigm “okay, here we are done, we will catch the rest at the testing stage” simply did not work. I had to speculatively, for each modification, sort through all the others in my mind and think about where a collision might occur. I’m sure that I didn’t catch everything at all, because I should go through all the combinations, when there are three, four, five modifications, and so on.

    It should be noted that by the time the work on “Fool” was completed, the concept of this game at the global level had undergone significant changes. I began to talk about what could push a person to buy new modifications and came to the conclusion that there was nothing but a bonus to winning money. Here, of course, many may object to me that the natural engine is interest in gameplay, not a prize, but when I started sorting through the modifications in my mind, I first went over those that increase the number of cards in the deck and came to the conclusion that for which I would not play with two decks for the same winning money. After all, earnings in this situation, divided by time, would decrease. Therefore, I tried to roughly estimate the increase not only in time, but also in complexity; somehow dealt with so that the price of the modification corresponds to the increase in profit as a percentage and introduces these earnings increase factors. However, in this situation, difficulty surfaced: I could not allow the player to include the modifications purchased once, since this would soon lead to a mess with all the rules included and huge earnings. Therefore, as a limiter, I decided to introduce tokens. One token - one activated rule (provided that it is purchased). Tokens were issued one for each victory in “Fool” and in case of loss, all activated rules were reset (later I found this approach too cruel and changed the rules for turning off modifications when losing a little, but these are such trifles that we won’t go down here) . However, in this situation, difficulty surfaced: I could not allow the player to include the modifications purchased once, since this would soon lead to a mess with all the rules included and huge earnings. Therefore, as a limiter, I decided to introduce tokens. One token - one activated rule (provided that it is purchased). Tokens were issued one for each victory in “Fool” and in case of loss, all activated rules were reset (later I found this approach too cruel and changed the rules for turning off modifications when losing a little, but these are such trifles that we won’t go down here) . However, in this situation, difficulty surfaced: I could not allow the player to include the modifications purchased once, since this would soon lead to a mess with all the rules included and huge earnings. Therefore, as a limiter, I decided to introduce tokens. One token - one activated rule (provided that it is purchased). Tokens were issued one for each victory in “Fool” and in case of loss, all activated rules were reset (later I found this approach too cruel and changed the rules for turning off modifications when losing a little, but these are such trifles that we won’t go down here) . Therefore, as a limiter, I decided to introduce tokens. One token - one activated rule (provided that it is purchased). Tokens were issued one for each victory in “Fool” and in case of loss, all activated rules were reset (later I found this approach too cruel and changed the rules for turning off modifications when losing a little, but these are such trifles that we won’t go down here) . Therefore, as a limiter, I decided to introduce tokens. One token - one activated rule (provided that it is purchased). Tokens were issued one for each victory in “Fool” and in case of loss, all activated rules were reset (later I found this approach too cruel and changed the rules for turning off modifications when losing a little, but these are such trifles that we won’t go down here) .

    "Fool" is essentially a game turned inside out regarding victory. Its essence is not to become the first to leave the game, but to not remain in the cold. And in theory, one should not give anything to those who came out, but take a certain amount from a fool. But personally, in this situation, seeing that the thing smells like fried, I would just leave the game, avoiding punishment every time. One could consider the number of interrupted games and evaluate the player’s honesty based on them, but this algorithm has a lot of holes: starting from errors in the system in which the game suddenly terminates and ending with the phone disconnecting due to a dead battery or freeing up suddenly needed memory. Therefore, it was decided that the loser should not give anything, the remaining ones left should give coins and a token.

    With the purchase of modifications, it was also not so simple. It was impossible - and I understood this - to simply give a linear list of modifications and allow anyone to buy. Otherwise, a person would have bought all the rules that are interesting to him, he would have simply scored the rest, having studied their essence and speculatively playing a little game in them. In addition, all kinds of flowcharts have always attracted me. In this regard, I always liked the technology development scheme in WoT much more than the parallel scheme for purchasing levels and equipment in Hill Climb Racing . Therefore, I developed a scheme for the development of modifications, trying to combine branches on topics and put at the very end the most radical distortions of the rules of the game.

    However, if everything was still going with the modifications, then with the rivals, arenas and shirts it was obvious that no one would buy them. That is, they will, but only after all the rule changes affecting the game are examined. I would at least do just that - first functional, then only beauty. And if there was still no chance with rivals, because these are new phrases that dilute the game, then with shirts and backgrounds the problem was more than obvious. Once climbed to see what are the options and no longer returned. Therefore, I introduced such a concept as "Lottery" and began to play elements that did not essentially affect the gameplay in it. “Lottery” appeared after a certain number of victories. So things appeared in my game,

    After the third screen I developed, “Lotteries,” I finally understood the main points that I used on each of the screens and wrote abstract classes that performed all the typical actions. Work on the Pyramid, Chests and King went much faster - they all took about 6 months of nightly exercises. By that time, I myself had a hand in hand, having developed an approach and solutions for typical tasks like animation or rendering mode switches. However, the system continued to give surprises.

    For example, I was horrified to find out at some point that the mechanism of animations and delayed execution was too heavy for me.
    I immediately decided that it was wrong to check whether the animated card flew in the drawing stream, and then wedged into the control stream and perform some logical action. Therefore, I did this - with the same time constant, it caused the animation and launched the pending action. This deferred action was inherited from my AsyncTask 'and in which onBackground performed the Thread.sleep () , and the onComplete - what I need to do.
    I had dozens of such deferred actions at each moment of time, of course, the main consumers were opponents. They thought which card to go or which toss; automatically after each touch on the screen, they expected that this touch would be the last and the next half hour nothing would happen, so they nervously glanced at the timer to start yelling from a certain moment: “Hey, where are you there?”; at the same time, they watched what action the player had stalled at to shout: “Hey, beat the cards” or something like that. As a result, with an increase in the number of deferred actions (and opponents), the system simply began to slow down terribly, or even fell off altogether. It turned out that the android AsyncTask in its doInBackgroundit really eats resources and this function is there for a reason, it needs to be pushed into it - whether it is receiving data from a remote server or some kind of parallel computing, and not empty waiting. Therefore, I rewrote the class I inherited from AsyncTask , after which all performance problems disappeared:
    publicabstractclassAction{    
        protectedint interval;    // интервал, через который рванетprivateboolean cancelled = false;    // флаг отмены действияpublicAction(int interval){
            this.interval = interval;
        }
        publicvoidcancelTask(){
            this.cancelled = true;
        }
        publicvoidexecute(){
            new Handler().postDelayed(new Runnable() {
                    @Overridepublicvoidrun(){
                        if (!cancelled) {
                            actionAction();
                        }
                    }
                }, interval);
        }
        // непосредственно действиеprotectedabstractvoidactionAction();
        // фабрика клонирования этого отложенного действияpublicabstract Action copyForDelayedExecute();
    }
    


    However, I was distracted.

    Obviously, I would start with the Pyramid, to which no modifications were supposed, and the experience of writing the engine from beginning to end would have been much earlier. You look, and the architecture of the "Fool" would not be so dirty. I would have managed to learn a lot of new things about how to write the system, and in which case I could rewrite the Pyramid without problems later. Starting with "The Fool", I piled up a bunch of mistakes in it out of inexperience, but still made it work, propping up on all sides with what I could and now was afraid to breathe on it.

    Therefore, another rule, obtained by blood and then, for everyone who is just starting: among large elements similar to each other, one should always start with the smallest.

    If I had read this advice a year ago, I would have said: “Well, this is understandable, only now I want to cope with the most difficult elements first, so that later I’ll leave something simpler. Thus, when I finish with this large and branched algorithm, there will be nothing but everything left until the victorious end. ” This is so, only with an unbroken hand, a heavy and branched algorithm is written worse. “I wrote the Fool and the Pyramid in this sequence for almost a year. If I had started with the Pyramid, the total term would have been just some 7-8 months.

    In addition, tackling the most difficult from the very beginning, there is a chance to simply retreat, unable to cope. And it will be much worse than stumbling upon an insurmountable obstacle after having already partially created the code. The exploits accomplished by that moment will prompt one to search for a compromise, while the lack of success behind the back can cause the hands to simply drop.

    The fourth iteration of naivety: polishing will not take much time


    As soon as I managed to finish the last, fourth game, I hastened to announce to my family and friends that only a few weeks remained before the release. There were very few of these friends who were dedicated to writing something, contrary to my habit of telling everyone about everything. From the very beginning, I felt that cracking left and right about what I was going to do, I was depriving myself of the strength to do this. However, the closer the release was, the less moral strength I needed to complete. The project gained weight and, like a snowball, almost rolled on its own to release. He still had to be pushed every night, but release was simply inevitable.

    For fun, I decided not to get a haircut until the release of the game. Given the rather large bald spot on my head, this decision was more than hasty. But I had a reason to talk with fellow villagers - every time I was asked when I had a haircut, I said that when I release my game. Most twisted their fingers around the temple, but I did not care, I was not without eccentricity.

    It took about two months to polish the game. During this time, the hair on my head managed to grow to such an extent that sellers in stores stood up to protect the goods when I went into the room. I looked like a bum. His head was terribly scratched especially in the heat, but this was a definite plus. More than once or twice, I, wanting to send everything to hell and go to bed, saw my shadow or scratched my already ugly hairy head and sat down to program, having coffee, because I knew that there was no one to finish my brainchild besides me. And the faster the release would happen, the faster I got my hair cut.

    Motivation is generally a separate issue. Many of my friends and acquaintances tell me that they would not be able to do some kind of project after work a year and a half day. I understand them, but I was lucky with the mental tricks that I invented to successfully outwit myself.

    Let's start from the beginning - the first thing I stopped playing games. At all. I did not start programming and there was not enough time for games, but it was I who purposefully stopped playing games. The effect was similar to a low-frequency dense hum in the air after turning off the speakers that had just played something terribly bass. I really lacked entertainment in life in the evenings. Moreover, every time I wanted to sit down and play something, I told myself that here it is - the most interesting game in my life - the release of my own game. All this self-management, thinking over the architecture and meaning of the game, the fight against bugs as a stream of endless quests. And over time, as it began to turn out, I really began to get involved in the development, it became my game. At the same time, like the difference between fatty meat and light vegetable salad, games created fun here and now, leaving a bad aftertaste of doing nothing the next day, development at first might not have brought so much quick pleasure, but all night after that and the next day I felt like a hero. It was a much more subtle and long lasting happiness, of a higher order, if you like.

    I forced myself to reduce all thoughts to my game. Probably someday my psychoanalyst pokes his tongue and shakes his head at this venture of mine, but I taught myself to always think only about my project, I literally turned on it. If I saw expensive cars, I immediately told myself that I would have one, you just have to work hard, and to start, release your own game. If I saw foreign countries, I told myself that I would definitely visit there, but only after I released my game and achieved something with it. If I saw people sitting tight, talking friendly about something, then I convinced myself that I would do this, but first, my project.

    Not a day without a line! It seems to be the name of this technique. True, I read about it just recently at the hub; before that, I felt for it somehow myself. Its essence was that after one day of development, skipping the next evening is not so difficult, but after a week of daily programming, a violation of this tradition seriously affects the next morning. Accustomed to the same rails, the brain rolls out of habit into “I will do it / get it when I release my game”, then recalls that nothing was done yesterday and a painful discharge by the brain into the brain occurs. Over time, I became afraid in the evening not to sit down for development. Because in this case the whole next day I was terribly tormented by my conscience and sick, sliding down onto my usual tracks “project first”. Sometimes, when there was absolutely no power in the evening, I just started Idea(in which I adapted to write) and sat in front of her for a couple of minutes, then went to sleep. So two or three times I managed to deceive myself by avoiding punishment.

    I very quickly stopped drinking alcohol altogether, realizing that I could not really develop anything under its influence, and if I missed at least one evening of development in the morning, a painful moral reckoning awaited me with a hangover. I tried to program early in the morning, getting up a few hours earlier than the rest, but then all day I was thinking only about my project, not about work. This option did not suit me either.

    Finally, the closer to the release, the more distinctly I realized that no one else would roll this stone uphill. The girl helped me by drawing pictures, but I did all the main work myself and was very happy about it. Finally, I found my calling and felt in my place, because every day I moved forward a step; My brain at the same time received a full range of pleasure from solving arising quests and developing a strategy for the victory of a particular innovation when introducing it into the mechanics of the game.

    In general, of course, I was lucky from the very beginning to tune in to the quarries of a huge rock with a pickaxe. Every day I did a tiny part of the whole huge project. At the same time, looking back at yesterday and looking at tomorrow, it seemed to me that I was marking time. However, over the next several months, progress was visible. I was not in a hurry, I didn’t aspire to perform a feat every day at any cost. Quietly and calmly, like a rice picker, he moved forward slowly, but surely, firmly in small steps.

    Returning to this iteration of my naivety, I would like to note that no matter how well-written the framework and the main code are, finalizing all sorts of little things will take much longer than you expect. Is always.

    Fifth iteration of naivety: I thought a good product would sell itself


    I tried to read a lot of materials for the future, including promotion. I knew that press releases should be sent out on the day the game was released. I also read that it is necessary to practice laying out materials on the game in advance, including in order to find out the public response as soon as possible and if you change the development course in time. However, all these materials seemed to me to be somehow not quite in line with our domestic realities.

    After all, I realized that releasing an English version of my game at the same time as a Russian version simply does not make sense. They don’t play “Fool” abroad, and the numerous phrases of my heroes nullified attempts to translate the game on their own. I remember sitting down and writing a bunch of funny exclamations in a notebook in a couple of days. Then, while I just rewrote them in a text resource file, I spent the whole evening. I got about 20 thousand characters of clear text in the game - this can not be translated by myself, with my own English.

    At the same time, being my main consumer myself, I kept asking myself questions - would it be interesting for me to read about a game that will be released in six months and which cannot be downloaded right now? Yes, I would forget about her right there. A very eloquent comment was recently to one of the articles on the game development hub - a man, waiting in the future for the release of his game, laid out a diagram of its architectural solution. The only comment that was left to him: “where is the game itself?” This is a harsh reality - someone will watch the trailer for Fallout 4 with pleasure, shifting from one foot to another in anticipation of the release; nonameBut the game, which is also not yet ready, everyone will point blank not to notice how the nightingale does not spill. If you really are lucky enough to interest someone in your game, drag him to the market soon, pop the “Install” button in your face until he changes his mind or until his mom calls for cabbage soup.

    As for the comments of consumers and the change of course, here is a quote from Henry Ford: “If I asked people what they want, they would ask for a faster horse.”
    Moreover, one cannot hope that a person who expresses his opinion and pending developer response, agrees that his proposal is inappropriate or spoils the overall concept. Even that his proposal was put in line, he did not really agree; here and now, since he shared his thoughts with you.
    They want Hill Climb Racing to be able to change the cap and colors of cars; they want more money, and winnings are easier. Karmic laws do not allow me to ignore an inappropriate sentence, leaving the question I was asked to hang in the air. But I don’t want to lie under the same laws of morality, and therefore I think it’s more interesting to get a response back to an already formed product, which in my case is more of a conceptual work than a project open for editing, operating on the principle of “any whim, if only you downloaded, rated, or better bought something. "

    For all of the above reasons, no one knew about my game, its name and concept until the very release date, except for the girl. AlexusPro connected at the final stageand gave a heap of CPUs, according to which I quickly changed a couple of interface moments, postponing the release for another week. And so even my fellow villagers who paid attention to my patles, I had to refuse to answer the question “what is the game about?”.

    And now the X-hour has arrived. I put off this moment a week in advance three times, realizing that in comparison with a year and a half, another week is nothing. In a marketing article, I read that Tuesday is a bad day to launch, and Friday is it. Therefore, if I did not have time for this Friday, I postponed the launch a week in advance. I understood how easy it was to screw up everything by releasing my project as a schoolboy, just to let it out, with a crumpled end or an unfinished bug, and therefore every time my head was scratched, demanding release immediately, but I realized that not everything was done , I told myself that, apparently, not this week and was postponing the launch.

    The first thing after the release, I sent out the news that I released my project to friends and acquaintances in contact, on Skype and in hangouts. Personal messages, only to those who might be interested. To my surprise, of those who installed the application and did not remain silent (and there were most of them), no one said that it was bad, everyone really liked it. Three or four completely strayed into the tight skeleton of the testers and began to play methodically, throwing me errors and suggestions for improvement. They play my game until today (although the third week has already passed since the release), prohibitively surprising me with this. Many people from those who, without embarrassment, can tell a person in person that it didn’t work out, who have every right to it, and even inclined to it, for some reason also praised my game. Apparently, it turned out not so bad.

    Many wrote to me that they were terribly (like me at one time) “Pyramid”. Of course, there were people who asked me what is already in the instructions (who reads them?) Simply because calling me is easier than sorting it out myself. Very quickly, 5-6 common problems were found for all, like an incomprehensible moment with lowering tokens to activate rules or attacking several cards at once. I tried to write out such things in a separate file and correct them as quickly as possible.

    I'm not even talking about error-errors. Since the year ACRA has been bolted to my game , so that I can test the game on my computer and at the same time track stacktrace errors. At the same time, I found out which of the friends and girlfriends which device.

    In total, with 40 messages sent, I received about 20 installations.

    I found a resource table in this article where I should write about the fact that I released the game. True, I was significantly limited in the use of this list, since the game has so far been released only in Russia, Belarus and Kazakhstan. Nevertheless, this also gave a certain increase in installations, although here I managed to fix it. The fact is that I pressed the treasured "Publish" button on Friday evening, June 5, and while Google approved my apk, indexed the game and started issuing it by search, it took 12-14 hours. That is, the game appeared on the market on Saturday morning. Naturally, at that moment most people were already at the dachas, and therefore even my sluggish attempts to promote the game on some android resources crashed on a totally empty runet. When Monday came, on the same trashbox right in the morning they dumped so much news that my game was already on the third page, where, of course, a rare bird will fly.

    There are two resources that I would definitely recommend for publication: androidpit.ru and android4all.ru. Both there and there on the forums there is either a specialized section “Rate my application” or a section “Games” where you can write about your game. In total, these two resources, which keep track of page views of the game, gave me about 200 (wow! Really as many as 200?) Potential visitors - those who found out about the existence of my game.

    I also guessed to post the game for two to the gd ( gamedev ) section , where I was quickly doused with tar for the schedule (how could I have done without it) and puffed feathers at me. Nevertheless, there were those who liked the game.

    And ... that's it. About 300 people currently know about the existence of my game, 500 - maximum. At the same time, I have about 150 installations, of which about 60 are active. Pf, you say? Well, yes, not thousands of installations. But for me personally, the idea that about 40 people completely unfamiliar to me put my game on themselves and still have not erased it, it seems quite a miracle.

    I can so easily predict the number of people who have ever seen my game, simply because it is not possible to find my application in the search except for the query “Cartridge House”. Even in the "Card Game Collection" I am below 120th place, what can I say about the "Fool" or even more so the "King". What did I want with 100-500 installations? Well, if possible, then I would like my “collection of card games” to be in the top ten at this request, since there are not so many collections of card games in the market. And by the way, if I type “Collection of card games” with quotes (that is, look for the whole phrase, not separate words), then I really enter the first 10k.

    Since you asked, I would also like to make it impossible to buy installations in the market, moving to the top of the list in the search are not the most successful games. But this is optional, for some people such a state of affairs seems quite honest. In the end, if typical entrepreneurs are forced to invest in premises, employees and equipment, why did I decide that there is such a sphere in the world where money and popularity are made from air using a computer and a head?

    So here is my next tip, do what you want with it: don't think that anyone needs your application. Seriously. Many of those who are reading these lines now, like me a year and a half ago, think: “I have a special application that has no analogues on the market”. Unfortunately googleI haven’t come up with such a tick as a “unique application”, and therefore your work will most likely be searched through a search. So, friends, even if you came up with an excellent converter for the size of pantyhose to the number of kilograms of potatoes placed in them, and there are no analogues to your application in the market, before that, all the applications about tights, then about potatoes, then about kilograms, then about sizes, and only at the very end is your application itself, which, I repeat, nobody needs.

    I would also like to note here that: I did not count on the rapid growth of installations, again choosing siege tactics. I know who my potential user is, a mustachioed 40-year-old guy who just bought his first tablet and knows only dominoes and “Fool” from games. Unfortunately, at the moment he simply won’t find my game in the market, contrary to what I have been telling myself all these year and a half, saying that the application’s popularity will slowly but surely grow.

    Sixth iteration of innocence: I thought I would rest after the release of the game


    I know, I know, I read about it many times - with the release of the game everything is just beginning. People begin to comment, bugs need to be corrected, articles written, and the project developed, otherwise very soon you will drop out of the race, they will forget about you. There is no time to relax.

    But for me personally, the matter was not even quite that. For almost a year I fed myself tales that life will change when I release this project. That any installations will go and I can relax and at least once calmly ride a bicycle or play Mortal Kombatwithout a sharp burning sensation in the chest from the fact that I am wasting time, while the project stands still. I released the project and ... catharsis did not come. The game didn’t appear in the market instantly, so the moment I click “Publish” I just can’t recognize by that moment. The moment the game appeared in the market is also because I didn’t have one so that the game just wasn’t in the market and now it appeared, and after a few hours there was already the first review and the first hundred installs.

    Sometimes it seems to me that it would be much easier for me if my friends and former colleagues said that everything was bad and was no good. If 10,000 people knew about my game, 2 of them would download, which would indicate an initial failure. Or if out of 1000 installations I would have 3 active ones, which would indicate that the game itself is simply worthless. Here the problem is that no one simply knows about my game. This at the same time does not allow me to calm down and at least not touch the project for a week, and at the same time does not answer the most interesting question for me: “so how?” The launch happened, but I don’t feel any relief.

    The advice here is obvious: if you have been working on something for a long time and the release is about to happen, and after the release you would like to relax, then as soon as you are ready to click the “Publish” button, say “stop” and rest for a week, then start.

    Unfortunately, this is not entirely honest advice, since I myself would not have followed him a month ago. I would say that I can no longer walk with this disgusting head of hair and must by all means graduate right now. Just kidding. I would say that all this week I will not be able to touch the project, that if I decide to relax for a week, then I will test and finish this whole week, no rest will come of it. Well, I would advise people with such an obsession to try to get rid of the computer physically for at least a couple of days and only then get released. I promise, I’ll have much more strength when my friends comment and the installation schedule creeps up. This is especially true if, unlike me, success awaits you with a thousand installations in the first day.

    Seventh iteration of naivety: I too fed myself illusions


    This iteration, as they say, to be continued ... After all, I continue to feed myself with illusions, as if the previous six pieces were not enough for me. For example, I continue to struggle to somehow convey to the general public the fact of the existence of my game, although it is obvious that the real state of affairs does not constitute even a thousandth of the position I expect and dream of. Although this is already my problem - I dreamed of it myself, I had to be more modest.
    I was sure that for me everything would be somehow different than for others who were telling about their experience, that I had thought through everything and foreseen everything. That I got something more than changing colors to light green and orange. And what is it that I just have to finish the project, how can I at least for some time live a full life, while he quietly lives his own for some time. That I will have the perfect game without a hitch. Finally, that after the release of the game everything will become much easier, because all that will be necessary is to advertise your application wherever I find it, and the installs will increase at this time.

    On the other hand, I don’t know what I would do without these illusions. If to be, then to be the best; bad is the soldier who does not dream of becoming a general and all that. Perhaps it was the illusions that my product was somehow exceptional that made me beat and beat it all this time. And, you know, I am pleased with the result. The post-release depression has almost come to an end and it seems very soon I will again start designing the extension of the project and writing the code for it, for debugging, equipping with new features, for choosing, finally, the further development path. Well, in short, I’m saying - six iterations are not enough for me.

    Curious conversation that happened in my hangouts with alexusProon the second day after graduation, on Sunday, when no one from the cottages had yet returned. At that time, I had only about 25 installations, of which 24 were active, and despite attempts to publish in a bunch of sources, every day there were only 2-3 installations. I then told him (the history of correspondence keeps this curious fact) that I would now have 100 installs and 10 pieces would grow every day, I would already be sawing through the add-ons and in every possible way developing the project further. I think this is the essence of human greed - no matter how many installations there are, they are always few. When I finally recovered from the impact of the release and took up the planning, the first thing I read all the correspondence with everyone and suddenly I found this irreverent statement. It turned out to be interesting because by the time I’ve been posting nowhere for two weeks now,

    Instead of a conclusion


    So, I lost my waking life for half a year (if you put together all the pieces of work), and as a result I got 9 ratings, about 150 installs and an article on the hub Was it worth it? Damn it, it was worth a thousand times!

    I learned how to design architecture, learned a lot about my determination and ability to manage my time, read a bunch of books, shoveled an armful of resources on android, put the finished project in my portfolio, got it right from life, so that it would not seem that everything was fine and just like some summer or sunrise, as it usually happens here in the village.

    I realized myself. Now I can’t imagine how you can spend your free time on anything else besides development. I learned the taste of a one-hour walk in the fresh air with my son after several hours of intense fabrication in front of the monitor. I grew up not only in my own eyes, but also in the eyes of those from my environment who saw my game. I knew the joy of unpaid work just for fun and am now going to rise after a crushing blow of fate in the form of a lack of interest in my application and rush into battle again.

    This project was really the most interesting game in my life and, it seems, I went through its single player to the end, now only play online and wait for the sequel.

    So with your permission, I still call it all a success story. And let those with much more preemptive installations laugh more at me.

    Also popular now: