Fake story: a little game, which taught me a lot and another ban from Google

Many people know the feeling when you feel the energy from the idea that allows you to move mountains and to develop a complete application, and not to replenish the cemetery defects. I kind of envy those people that know how to soberly assess their abilities and not get bogged down in the mire under the weight of routine. I have had the strength not to allow myself to start something new... But of course, the development of large, long hobby projects "because to throw a" pity pull the juices, and brings joy. This publication is about how I purposely gave up the slack, so to cheer myself up by developing a simple game in three days. Did it for a week, spending ten muffins, but got a lot of experience and good mood.

Totally by accident, noticed the publication in which more detail and clearly disclosed my opinion about the calculation of the forces. I recommend to those who missed to see the translation PatientZero article "You will never finish your game".

the

the Plot


Reading one entertainment portal, I came across interesting comics which describes the plot of "the Perfect game for Telltale Game". And not that it had something to do with my experience, but the idea hooked me. I postponed it for later. Then came the next day when I realized that the idea of me not far behind. However, something was missing. After studying the comments of the post I realized that...


(added the answer is "sarcasm", a reference to the game Fallout 4)
I decided I was going to make the game for a few days.

the

Start developing


But the decision was not final; I could deflate in the middle and so short way. After thinking a method was found to test my dedication. The development was initiated from the layout menu... Not that I could not or did not like to develop a GUI... but who am I kidding? I don't like to write GUI in Unity3D: of course, with the release of a new version the situation has improved, but the system is still far from ideal.

With the layout the menu here is a funny story. My neighbor long time asked me to show how I'm developing something from scratch, and I promised to call. In General, the boy lasted only three hours layout of the main menu...

the

Specification of plot


In order to avoid misunderstandings, to clarify the story and "gameplay". This game is impossible to beat or win. The essence is that the hero is greeted by the girl (literally a few words) and asks the question "How was your day?". Any reaction of the player leads to a quarrel and the end of the game. I saw it as a game the snag/draw.

the

Graphics interface


the

Design menu


First, I wanted to make a classic menu for the text of the novel, with buttons &labels, but then decided that it makes no sense and remembered that long ago I purchased a pretty good set of buttons with icons: Flat Icons Vector.

For backgrounds of the panels I used the image "Food" authored by a certain Elijah. Originally, I was going for every girl to pick the background, but then have refused this idea in favour of keeping the General color scheme of the game.

the

error


Download beautiful background picture and generate a character in a special maker, I started thinking about the architecture of the game. Unfortunately, my choice was wrong: the scene on the screen, instead of just switching the elements of the canvas in one scene. In consequence, it cost me some rough edges in the code and the strange logic controllers, because I rested on the speed of development. Fortunately, the workload has not led to a deplorable situation: injured only my pride.

the

First placeholder


By the evening of the same day, I realized that I wanted to finish this game. It looked like this:


(this is not a UML diagram)

In consequence, this scheme has not changed. Just added one phrase for girls and the reaction to the minute silence.

the

character Development


I immediately decided that one girl for my game will be small. Stopped at four characters based on the most popular archetypes of anime characters. Well and in what style, to do a visual novel, not the anime?

Tsundere — there is a word from Cancun (tsuntsun), which means disgust, and deredere (deredere), which means love. These characters initially appear as an unpleasant, often narcissistic and selfish characters, but a plot discover "light", the good side of the character. A character from "game" only starts to reveal its bright side.

Maid — servant. One of the typical designs of anime characters, designed to be combined with the image of "sexy maidens". In this case is "voluntary assistant".

Sister — not quite the archetype, but in the anime, this theme will always be the girl who hung up on character and considers himself his sister.

Andere is originally a very gentle and loving character, love which for some reason becomes an obsession, often leading to violence. Character-andare mentally unstable and uses violence as an outlet for their emotions. (after staying in Okinawa).

Художник1 immediately set to work, using some resources from another project, which led to the similarity of the characters.
Based on appearance, I just chose some I remembered and heroes. Drawing has been used not a pure anime style, and added a soft shadow, which gives some "lamppost" game.



I pondered over that cost will stay in more
classic style and dere heroines.
, but had the resources for the above result.

the

Writing phrases


Phrase GG I took from the comic, but the reaction the girls had to develop. Of course, ideally it would be nice to spend a couple of experiments, to hire psychologists and experts, but in reality, everything is easier. (and cheaper)
As you may have noticed, humor, spelling and punctuation are not my strong places. Therefore, with the development of the texts I was asked to help his friend, animeshnika. In the world he android developer and do not want to be associated with something else. In this regard, I will not quote him, but very grateful to him.

Study any character that is not like you is a very difficult job. Especially because we only had a few phrases to reveal character. Fortunately, simple archetypes of heroines; sleepless nights watching anime and manga; roleplaying D&D allowed to dive into the gaming universe and write the most realistic phrase.

The most difficult character was Yandere, panache and elaborate phrases. In the end, she was dark-skinned (tolerance!) rosogolla girl type "'ll beat loved until you love".



the

character Animation


This project first when I sat down and figured out, how does the Animator. Although I use only the effect of changing transparency and changing of images to animate characters, it was not so straightforward. The characters not only change facial expressions, and postures that change the contour of their body. If the face can be animated "overlay + care transparency" with a body that won't work. In these novels, the characters are cut into several pieces (arms, head) and animate it only. It is related that during the animation the character can become transparent.



the

Development achievements


Always dreamed that when I make a game, add a lot of achievements. At first, I thought I was limited to 20 achievements. (by hitting the end with every girl) However, in the release version I managed to prepare 29 achievements. And even if one of them is given in the view of the authors of the game, dream achieved! Two achievements will track the status of the player, and another six are set as a reward for unusual activity.

To make achievements more interesting to obtain, художник4 three of the muffin, agreed to prepare the icon for each achievement. At the time of writing, the icons of achievements was not yet ready, so I'll save the plot, leaving only the sketches available to me.



The integration of achievements to write is not much point as it is great article from litemesa. The only inaccuracy (or change) concerns the cumulative achievements. At the moment, Google Play does not need to increment the status of the achievements, and send the current progress in percent. (at least when using Social.ReportProgress).

Like achievements a bit, I just kept received in PlayerPrefs as a string "idдостижения|...|idдостижения". But keeping them there only after receiving a confirmation from the Google server about successful receiving. I have also made a cumulative achievement, "the Process of opening all endings". For this, the achievements obtained in open endings, I duplicated another line. It looks like this:

the
 public void FinishRoot(string achId)
{

if (Authenticated)
{
String roots = PlayerPrefs.GetString("Roots");
if (roots == null || roots.Length <= 0 || !Array.Exists(roots.Split('|'), element = > element == achId))
{
if (roots == null || roots.Length <= 0)
{
roots = achId;
}
else
{
roots += "|" + achId;
}
PlayerPrefs.SetString("Roots", roots);
}
totalRoots int = 20;
float progress = ((float) PlayerPrefs.GetString("Roots").Split('|').Length / totalRoots ) * 100;
Social.ReportProgress(PlayAchievements.achievement_girl_negotiator, progress, (bool success) =>
{});
}
UnlockAchievement(achId);
}

In fact, drawing achivok strongly inhibited the release of the game. I just did not notice that художник4 not cope. In the end, called художника5 (for the same three muffin) to help only on the third week, when everything else was ready for the end of the first week. I mean, I just for two weeks "waiting". (the first five icons were ready in three days)
There were nine achievements that have no pictures... For one of them I crooked from the anime "FairyTail". The second perfect girl icons. For the third treated one of the sketches. Icon remaining achievements was the icon of Yin and Yang.

the

Text Stroke


The screenshot of the prototype can be seen being ridden text. This is one of the first versions of a component that I wrote for the game: text with stroke. It consists of the two scripts, and two text boxes.

If with margins more or less clear: this text, and indeed the shadow, then the question may arise why do we need two scripts?

StrokeText is a ExecuteInEditMode component of his methods are executed in the editor. In addition, it stores the default values of variables (from the inspector) and apply them. It was made for convenient debugging to the input of the localization system.

TextController is responsible for the synchronization of parameters of the two text fields. In addition, in this class there is a method for animated text display. (simulation of a typewriter):

the
 void Update ()
{
period += Time.deltaTime;
while (cursor < text.Length && period >= stepTime)
{
period -= stepTime;
cursor++;
string _text = text.Substring(0, cursor);

if (_text.Substring(_text.Length - 1, 1) == " ")

period += stepTime;
}

textField.text = _text;
strokeField.text = _text;

if (listener != null)
listener.textShownPercent((cursor / ((float)text.Length / 100) ));
}
}

Of course, experienced developers will tell you that StrokeText must be replaced with the Editor script, but I shudder at the fact that once again you need to programmatically set different parameter input fields...

the
 void Start()
{
textController = GetComponent<TextController>();
UpdateParams();
}

(By the way, this component will not behave properly with the right script)
However, I paid dearly for my choice, going against the architecture of Unity without proper experience. What problems I got this code will be written below.


(Here, by the way is pretty positive a screenshot when it may seem that I'm a real Unity developer)

UPD:
It turns out that in Unity3D there are shadow for text fields. You can install it instead of the second field. Thank you Lertmind for information.

the

Translation & Localization


A good translation is the best that can happen to your game/app*. This knowledge came to me in a long and successful work with Alconost. Unfortunately, in this case, I could not help because the payment of the muffins was not accepted. So I decided to try to write in chat of Java programmers Technosphere and I was damn lucky! My
request
"And then by chance no one wants to translate 5000 characters in English, to be in the credits of the game? :D There icon anime maid with kotovirta. About the Juggernaut from the Mail. Only it's not a Juggernaut."

responded Dmitry Tsyganov. For some days he made this English translation:
the
    the
  • Even I with my level of understand all the phrases except for "Aunt Jemima".
  • the
  • After the "reverse" translation, some phrases were better than the original.

*After the badge, "editor's Choice" or sales overмногоденег.

the

Localization


The translated texts is certainly cool, but what's the point if they are not in the game? Names translation in Unity/Android it's simple: you just need to create the Plugins folder for the usual OS file string resources.
\Assets\Plugins\Android\res\values-xx (values just for English):

the
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Hello World</string>
</resources>

For the translation of texts in the game, standard tools in Unity no, but there are many custom Assets for this problem, both paid and free. But what programmer doesn't love a quick bike? (Answer: good) In the quality of the localization I decided to take a small script with localization in Android style:
the
    the
  • xml file with string resources
  • the
  • script Editor, which parses the xml and generates the enum id for lines
  • the
  • singleton, which retrieves rows from an xml resource id for the enum
  • the
  • LocalizationController, which has an array of text Components and the names of their owners requested localized text singleton

Overall, this is a common script localization with the exception of the automatic generation of enum. Sorry, I could not find its author, so I just filled in the code on Gist. I just added support for your StrokeText.

the

StrokeText


Remember, I wrote that I would call the StrokeText initialization in Start instead of Awake? That is the localization backfired. I got two situations:
1) work out the first Start() StrokeText, then Start() in localization
2) first, work out Start() in the localization, then StrokeText
It drank a lot of my blood... at First, I very long tried to pinpoint the cause. Like in the case of localization, and the like "dynamic texts" are taken correctly. But when found, was so tired that... Using a lot of hacks to control the order of Start, used timers and coroutine. Instead use Awake to initialize the text: the correct architecture steers.
the

Development background


Actually, I liked the background from the Internet that I wanted to keep it. Unfortunately, all bans that I moved slightly blew my mind and publish apps with pirated content would have acute bouts of psychosis and paranoia. The next logical step was to try to find the author to ask him to license the image for game three of the muffin. Unfortunately, I have never been able to find mention of the author. (Although I managed to find the post on deviantart, but I realized it was not the author). So I just asked for художника2, which usually draws me to redraw the backgrounds so I like the background; set a terribly short time, and went to do their business.

Of course, it was my mistake, because художник2 knew about my problems with copyright and has slightly changed its concept. So, I had to "break the sun" to stretch the canvas and to remember how the effects in photoshop. Below are three images. I deliberately combined them without the possibility of increasing: important major elements, not the detail. The second image is a version of the artist; the third, to my processing.



the

pause Music


A year ago I was on GameDevParty to game design, where it is very clearly explained that good games without sound does not happen. The following words from my article that I never finished: I thank game producer Alina Brazdeikis for such a valuable lesson.

However, muffins on the music I is not allocated, and in the best traditions of the Internet began to look for a free composition on the key word "romance". And found fact! Unfortunately, the game looked very fresh with one melody in the background, but I clearly remember that the music should fit the moment.
Therefore, the search was continued, but on request the "free battle rpg music". In my head it looked like this:
leaves a socket with answers; begins to play a typical combat music; the player understands that it's not so easy...

About how you can make simple Manager sounds wrote HexGrimm. I'm playing two melodies only add to a game controller a method that ran one of the two shardagang tunes. Also added saving and loading of the first and only settings.

the

Web icons


There should be a paragraph that icon is very important for applications, but this is a very hackneyed theme. I just write that according to information from неGoogle. (A very interesting lecture on metrics from Google Play Efimtseva Natalia. Although compressed for my taste) users like dragons and female secondary sexual characteristics.

The icon I agreed to do художник3 one muffin as assessed the level of trash for which she thanks a lot. By the way, she already made me an icon successfully combining dragons and female secondary sexual characteristics, but it is irrelevant. But to get the icon artist is not enough: we need a concept! I had two options:
the
    the
  • Combination of all the characters in one icon
  • the
  • Output to the fore one of the characters

Joke. Everyone knows that there are always at least three options. Here's the third and fourth
the
    the
  • Brand left, but mega-Busty character
  • the
  • well-Known character in the style, did not hide his features, but allowing to avoid the ban because of copyright

I had not considered because of their complete immorality. I'm here for fun, not money going in any way. So, I went back to the original:
The first option disappeared pretty soon...


(at the time I was ready only 2.5 girls)

I think that by process of elimination, all realized that I stopped on the second option. But of course, icon has passed a long evolution.
As a Central heroine, was chosen Maid, the most charismatic option, if you can write, given the duration of gameplay. In my plan, she was supposed to be dissatisfied with the user, causing a desire to install the game and solve the problem.

the

Version 1


I dubbed this version "the Maid killed the fly that it a very long reach, and very glad".



In fact, it was almost "IT is!". I was embarrassed that the girl looks at the fist, not the user, and the fist was less of a gesture and a movement.

the

Version 2


To name it is not. I liked the previous pose. In addition, this girl is rather advised to skip the problem than to solve it beckons.



I absolutely can't draw (or successfully support this legend) but occasionally take in hand "Select rectangular region", in order to make a few sketches about what I want to see. It is understood that between the versions actually had a long conviction, "my examples" and images from the Internet "right."

the

Version 3


Return to the previous posture with preservation of the fist and looked at the viewer. The fist is now smaller breast that definitely diminishes the aggressiveness, on top of added tightness, and the anime icon of anger. Very cute inflated lips, but her mouth emboss the desired pattern.



the

Version 4


Almost a picture out of my head, but where do without tar? The fist is still comparable with the chest, also, I forgot to indicate missed point of reference (which is not in the article) but there's an artist — lace bracelet on his arm.



the

Version 5


The fist is reduced, Fenichka added. Perfect...



the

Progress 1


The maid goes from sketch to line art along the way to get the defect in the little finger and eyes.



the

Progress 3


Begin to gradually pick up the skin tones and define the zone it will turn brown/Shine.



the

Progress 7


Who said that fun to draw?



the

Release 1


It took about two and a half hours after the start of work. Specially trained dwarves passed carrying case with muffin artist.



the

Release "Well, it's just the last edits 12.png"


About the way was done when designing icons for such a simple game.



But of course, the results of the work can only be judged after the statistics of the downloads and the comments of competent people.

the

Photoshopinstallation of search results




the

Optimization


At first I just wanted to laugh it off that this project does not require optimization, but life decided otherwise. I expected that the game size will not exceed 20mb, but it got 34mb. Therefore, in the optimization, I was interested in reducing the size of the resulting Assembly. There are two materials that you should read. It is a bit old, but nevertheless, it actual fucking article from fischer and official documentation(!).

The first thing I habit drove all the graphics through pngquant. (optimization error) of Course it did not help me because in the process of Assembly Unity3d converts all the graphics in your intermediate format what is quite clearly written in the documentation. Where by the way I learned about such wonderful things as the Editor Log, which immediately helped to identify the problem:

Unacceptably much space was occupied by the background and most big picture of the game. Transfer size in powers of two reduced app size to 7MB. (Actually, I reduced the background of the socket — file of food)
About MB I won by setting the Stripping Level.

Subset NET2.0 I have used the default, but about "Universal build" I completely forgot. A separate Assembly for ARM7 and x86 architecture has allowed to reduce the size of apk file to the desired 18мб. Happy End. Although it would be awkward if someone will slow down the animation after my words, that optimization is not needed here.

But of course, the moral of Zen I turned off the generation of mipmaps.

the

Advertising


To somehow recoup muffins, I decided to add banner ads and interstitial ads. A banner I display at the bottom of the game menu, and interstitial ads every third attempt. As in the case of achievements, I used the standard library from Google: Official Unity Plugin for the Google Mobile Ads SDK. Hooked up easy, but is earned only after upgrading build tools to the latest version.

Of course, I do not amuse myself with the fact that it will be possible to earn something at ad-hoc entertainment, but could not add... So my character is like.

Test


Game testing is a special kind of testing: it is not enough wrote on Habre. Even this game you can test endlessly, so I just stopped at the following points:
the
    the
  • Position of the elements UI for different resolutions
  • the Results of achievements the

  • Advertising
  • the
  • Save your game progress (achievements) on reboot
  • the
  • Check the accumulated achievements
  • the
  • Sync achievements from Google Play

This may also include proofreading of game texts. In General, the most difficult was to achieve that gratitude adequately looked at any aspect ratio. Painfully a lot of them plucked up.

the

Error


In fact, the development of the game, I had only three errors. This is the already mentioned problem with the wrong initialization StrokeView and jumping because of this localization.

Sprite saved in the wrong size (1024х1025) was not displayed on some devices in the first test. By the way, 1023х1024 also Fig.



The third mistake was the wrong work with the library to integrate ads from AdMob. I very long could not hide the banner and show it again if necessary. First, I forgot to track the life cycle of the application. (OnApplicationPause) Then, forgot to check for banner and endlessly created. Undoubtedly the use of familiar tools on the new platform is an important experience and skills.

the

Publication


the

name


The name is the essence of the entire application it should clearly show its essence. (preferably containing a key word) I wanted in the title was an allusion to the fact of the draw in the game. And of course, the name was meant to scare away those, to whom this game would not be interesting. Ideally, the title should have been easily reduced without losing the uniqueness and meaning.
I started with option "Super realistic simulator girls." Not that it did not meet my requirements, and does not fit in a limitation of Google Play (30 chars)
Then I began to ponder over the title, starting with their claims. The easiest way to scare off the snobs — to use slang. And I did it!
Name: Fake NovellaSimulator Chan
Though English was a problem. Of course, borrowed words in modern speech feature is not only the Russian language, but the equivalent of "Chan" in English not found...
Had to stop at the next option:
Name - Fake Novel: Simulator Girls
Abbr NSV. - Fake Novel

the

upload multiple APK in Play Store


It was something new to me: used to cost universal a APK file but it was easy. It is enough to specify for each architecture your Bundle Version Code and upload using the advanced control mode.
Boring picture


the

Age limitations


It seems to me that every time IARC survey is gaining more and more points... for Example this time I learned what "stikine". In General, it's an interesting experience to learn such words from the Developer Console Mobile app. The final rating of the game:



It was originally higher:



It turns out that "revealing outfits or nudity in an erotic context" becomes the "Image of sex". I wonder who translated it.

the Age limit in these games is so amorphous substance, which change all the time. At the time of publication, the age rating is higher. I decided to specify that the game implied violence, and there is also Nude female Breasts with covered nipples.

Proof

(the first version achivki "Collector")


the

Sex Google


After a couple of hours after posting I received an email because I disliked addresses...
After review, Fake Novell — Girls Simulator, com.bianf.fake_novel, has been suspended and removed from Google Play as a strike policy because it violates the sexually explicit content policy by containing images with nudity.

Next Steps

Read through the Sexually Explicit Content policy for more details and examples of policy violations.
Make sure your app complies with all policies listed in the Developer Program Policies. Remember additional enforcement could occur if there are further policy issues with your apps.
If it's possible to bring your app into compliance, you can sign in to your Developer Console and submit the policy compliant app using a new package name and a new app name.
Additional suspensions of any nature may result in the termination of your developer account, and investigation and possible termination of related Google accounts. If your account is terminated, payments will cease and Google may recover the proceeds of any past sales and/or the cost of any associated fees (such as chargebacks and transaction fees) from you.

If you've reviewed the policy and feel this suspension may have been in error, please reach out to our support team policy. One of my colleagues will get back to you within 2 business days.

Regards,

Remember that the achievements have a picture of the female breast with the nipple covered? Like it's not my first app to Google, but I haven't delved into sexual politics.



The app has been BLOCKED finally. Without the ability to send a new version with bug fixes. Three final lock is a lock on the entire account.
I only have a question: "Why then such a detailed test?"



Why not to do based on it, a pop-up window "be Careful, your app may eventually be banned!!!".

So no sex in Google Play. Such things...

the

To be, or not to be


I write these lines, not knowing how it ends. You need to create a new version of the game and try to send it. The first problem after the ban is what is needed to change the name and app package.



Fortunately, I made a mistake and wrote "Novell" instead of "Novel" in the title Sabantui version. The application package for this error did not contain: there I replaced the "novel" "novelette". Of course, just in case removed the screenshots achievements and their icons, and achievements thecentury.


Ban this version will mean a lock on the entire account. (with him I posted a Manga Reader of the last article and has already received one warning) I Hope that someday GP will support with a human face. And applications will first freeze, with SPECIFIC reasons and then ban. Brace yourself and click Publish!

the

after post


I notice that corrected the maid has no protein. Updating the icon, I see that new versions of the icons have not been published. Publish change icons achievements! I hope that the moderators Google Play have access to the latest achievements, otherwise...

the

After one hour


Mail drops a letter... IARC RATINGS CERTIFICATE. A good sign. Usually, if banyat to obtain the certificate. I update the developer console... the Game is published. Unexpected, to be honest: lately I have no luck.

Habr not a place for complaints but
did not pass the interview to an interesting place for a job "without experience" and my mage in D&D brutally eaten by ghosts.


the

Task tones


Despite the futility of the project, I don't want to send it in free flight just after launch. To be honest, I am surprised by the huge number of apps in the market without ratings. Using the accounts of friends and acquaintances, I plan to write a few humorous reviews, to set the tone for organic users.

the

PostScript


I hope that my publication did not offend the presence of I have a few questionable humor. Also want to note that the game release is in no way associated with February 14. (Due to the delay of the icons and Google for March 8...)

Now the main thing is experience, how would you assess this week's work team. (and the month of artists icons) One of the main problems is that many users may be disappointed by the style of the characters is different from the icon; curtained expectations because of the higher age rating and, of course, a hell of a short storyline, and the fact of "obstruction" not everyone will take a joke. On the other hand, I blame myself, which made the game against most of the canons of the game design. Though of course, I hope for cheerful comments and a no word of mouth.

Of course, I'll be glad to answer questions in the comments, but I'll try to anticipate some of them by tradition.

Q: Why don't RenPy?
A: Unity3d is interesting to me, and RenPy.
Q: the Technician uses the tool to the task, and not customize the usual tool for it.
A: Depends on the purpose. I wanted to do complete game on Unity3d and I did it. My fuse was gone faster than I'd done with RenPy.

Q: will You publish statistics?
A: I think about how to write an article "Play for a week in a week."

Q: will You publish the source code?
A: I'm not a big expert in Unity3d, but I plan to publish the source code is from the second article to get a lot of useful tips. In any case, I will only publish code. Pictures will have to be cut or from the game or from the article.

Q: Is The Artist? Nevertheless, the verbs you write in the feminine.
A: That's my thing. I am so accustomed and easier. I hope that no one thinks it's insulting.

Q: are there too many links?
A: If you are reading these words, the UFO decided not too. I respect the time of those who read my stories and don't want to force them to look for something by keywords.

Q: You made a game from a couple of slides for the week and proud of it?
A: I went for a week full cycle from idea to the publication of Article based on information from habrahabr.ru

Комментарии

Популярные сообщения из этого блога

Templates ESKD and GOST 7.32 for Lyx 1.6.x

Monitoring PostgreSQL + php-fpm + nginx + disk using Zabbix

Custom table in MODx Revolution