Инди Егор Нестёркин
1474

Sokopango Game

Мне почти 35, я немного бородат, и я выпустил свою 1-ю игру. Улучшенный клон старой игры Pango для ДОС/Агат-9.

В закладки
Аудио
Трейлер к игре.

Добрый день. Это мой 1-й пост. Хочу рассказать о своем опыте разработки игры.

Аннотация

Как и многие программисты, у меня возникла идея создать свою игру. Причины: это наверное интересно, и зарабатывать не работая - выпустил игру, захватил мир, грести бабло лопатой.

Пролог

По образованию программист, с середины 5-го курса пошел в 1С, так и работаю до сих пор в 1С - на себя, свое ИП.

В конце 2015 решил, что хочу написать игру для телефона. Выбрал Java и начал его изучать. Думал, возьму какую-нибудь библиотеку и навояю с ее помощью игру. Поизучал немного и узнал, что есть игровые движки (я знал это и ранее, просто сразу не принял во внимание). Выбор предстояло сделать между Unity и UE4. Интернет, обзоры, искал информацию, что лучше. Ага, щас! Это я позже понял, когда стал более зрелым в программировании, что это просто инструменты, которые нужно выбирать не что лучше вообще, а что лучше для меня, проще, выгоднее, и т.д. В общем, все вроде указывало на Unity, но выбрал UE4 - C++ немного знал (в университете писал на Delphi - блин, набор штампов: 1С, Delphi), есть визуальное программирование, графика типа круче, и добрый набор других плюшек.

Если кратко - изучал я его (движок UE4) с весны 2016 до весны 2018. Блин, 2 года! Конечно, я это делал в свободное время. А изучал как - решил от корки до корки пройтись по всей документации, полностью все повторяя у себя, а не просто читая.

В 2017 начал свой 1-й домашний проект - 3D шутер в кубе со специализацией игроков. Особенность - перемещение во всех 3-х направлениях, т.е. еще вверх-вниз. Прототип готов, но я не готов - мало опыта, нужно много контента, а я не дизайне, не моделлер, не пр.

Зимой 2016/2017 и 2017/2018 участвовал в https://russianaicup.ru. Оба раза доходил до 2-го раунда, в шкафу лежат 2 футболки за них.

Весна 2018 - знакомый подкинул идею мобильного приложения, 3 месяца делал, сделал. Пока проект заморожен. Это мой 2-й pet project.

Лето 2018 - весной купил дачу, все лето на ней пахал.

Собственно, рассказ.

В детстве у нас был компьютер Агат-9, и там была игра Pango. Решил, что это будет 1-й моей игрой, которую я выпущу - мой 3-й pet project. Были и другие идеи, у меня список большой, но остановился на этой, т.к. считаю, что 1-я игра должна быть простой в реализации, желательно клон, чтобы на ней набраться опыта. Можно конечно клон тетриса или арканоида, но с ними мир не захватишь.

31 июля 2018 - 1-й коммит.

Решил, что по возможности все буду делать на C++, чтобы набраться опыта в движке. Я же хочу не просто что-то там сделать, а получить реальный опыт, новые знания, ибо мне нравиться программировать.

Что писать про само программирование, даже особо не знаю. Есть идеи, реализую их в коде. Были проблемы - решал их. Кратко - прям много чего узнал, много чего реализовал, т.к. делал реальный проект, а не "Hello, word!". И всем советую, если хотите получать реальный опыт, делайте то, что вам нужно, либо кому-то нужно. Только так вы научитесь чему-либо.

Особенности реализации:

- в проекте 1 карта, все карты хранятся в json-файла. Главная причина - было не удобно рисовать уровни, поэтому сделал отдельно редактор уровней на 1С (потому что быстро). 2-я причина - уменьшить размер игры, т.к. сжатый тестовый файл будет в разы меньше весить, чем карта в UE4. 3-я причина - возможность менять состав уровня без обновления - стянул карту с сервера, загрузил, профит. 4-я - ну это на будущее - редактор карт в самой игре, обмен картами между игроками.

- вспомню, допишу.

Контент.

Часть куплена, часть скачана с бесплатны ресурсов, часть нарисовано мной. После напильником обработано - спрайты, треки.

Список используемых сторонних ресурсов и их источника есть в игре.

Наше все:

Paint.NET - мне нужна был прозрачность, но Paint ее не поддерживает. Нужен был простой редактор. Как оказалось позже, в нем дофига чего классного есть, что мне пригодилось: замена цветов, куча эффектов/коррекции, слои, удобный зум/скролл (в Paint неудобный).

Audacity - чтобы обрезать трек, уменьшить размер (1 дорожка, понижение битрейта).

Организационная часть.

Использую git, но в основном для бэкапов. Поработал, перед сном сделал коммит.

Все свои мысли у меня был в обычном тестовом документе "TODO.txt". Здесь есть все самое важное - это и дизайн документ и дорожная карта, куча ссылок по разным вопросам (по разработке, продвижению, пр.), идеи на будущее, пр. Остановился именно на текстовом файле, т.к. это быстро, и для 1-го раза пойдет.

Игру писал вечером и ночью, иногда на выходных. За месяц до релиза работал до 3-х ночи.

Сборка.

Проект сначала собирал из редактора, но там настройки берутся из конфига, т.е. нужна, например, Development-сборка, зашел, поменял в настройках параметры, собрал, нужна Shipping-сборка, аналогично. Потому сделал себе батники - пришлось потратить время на то, чтобы узнать как работает UAT (Unreal Automation Tool, именно эта программа собирает проект). А потом до меня дошло, почему в UE4 есть несколько способов собрать проект, сначала я этого не понимал.

Поделюсь (могу быть не прав):

- через меню "File - Package Project" в "Unreal Editor" - берет настройки из "меню Edit - Project Settings" (из файлов конфигов). Т.е. если надо из этого меню что-то собрать, но с другими параметрами - идете в настройки и вручную меняете, а потом собираете.

- через "Project Laucher" - тут вы создаете профили с разными настройками, т.е. для каждого профиля будет свой набор конфигов. Если вам надо собирать и Development, и Shipping, делаете 2 профиля 1 раз и все. Уже не нужно заходить в настройки проект.

- через командную строку. Вручную прописываете все. Замечу, во всех случаях вызывается UAT с набором параметров, это видно при запуске сборки - смотри начало лога.

Тестирование.

Обязательно покажите кому-нибудь свою игру, пусть поиграют в нее. Своим незамылиным взглядом вам покажут на то, что вы не замечали, или считали не важным.

У меня так несколько косяков и недочетов нашли. Было это не задолго перед релизом. Часть багов была связана с монетизацией, часть с геймплеем.

Расходы:

- 0$ за Google аккаунт - был ранее оплачен.

- 30$ за 3 бандла от Kenney. Купил, надеясь, найти спрайты героя и анимации. По итогу спрайты взяты от туда же, но из бесплатного набора. В общем почти все взято из этих наборов.

- 18$ за музыкальный набор от Gamemaster Audio - эффекты и несколько треков. Почти все звуковые эффекты оттуда.

- 12 EUR за домен от Google. Как бы не нужен, но для важности взял. Может в будущем пригодится. В евро, потому что для России сервис не работает, пришлось указать, что я из Нидерландов.

- 35.70 EUR за хостинг от altushost.com. Специально искал хостинг в Европе с ДЦ там же. Также хрен знает, зачем взял, т.к. для игры и ее продвижения это вроде не нужно.

- 100$ Apple за возможность выкладывать игры в App Store.

- 1634 RUB за а/я для указания адреса в Google Play, т.к. у меня есть внутриигровые покупки. С регистрацией ящика у меня вот какая оказия. Арендовал я его через сайт почты (класс, 21 век, все можно сделать через интернет) - выбрал, внес свои данные, оплатил. Оставалось прийти на почту с паспортом и номером заявления. Оказалось, здешние ничего не знают про то, что это можно сделать через интернет, хотя на сайте утверждается обратное. Объяснил, назвал номер заявления, дал паспорт. В общем оплату они мою увидели, но в "своей" системе по этому поводу ничего нет. Звонили в бухгалтерию, тоже не помогло. Написал заявление через сайт - до сих пор рассматривают.

Сборка под iOS.

Для сборки под iOS проекта на UE4 нужна MacOS. У меня Windows, мака нет. Пробовал установить/запустить виртуалку, не получилось. Пришлось арендовать VPS (hostmyapple.com/mac-vps-hosting) для удаленной компиляции. Не с 1-го раза, но получилось собрать проект. Если кому интересно, достаточно поставить X-Code, ну и обновить ОС, если стоит не самая свежая. Долго промучился с ошибкой "Invalid SDK MacOSX.sdk ... и Invalid SDK iPhoneOS.sdk ..." - помог запуск команды "sudo xcode-select -r" в терминале - долго искал решение. Иногда при сборке бывают ошибки связанные с rsync - просто надо заново запустить сборку.

На данный момент игра еще не одобрена в App Store - 2 раза отклоняли 1-й раз требовалось подтвердить, что игра соответствует указанным пунктам гайдлайна (список был в сообщении). 2-й раз написали, что игра у меня азартная и на деньги. Написал сообщение, отправил на ревью (в приложении ничего не исправлял), уже неделя прошла - тишина. В конце статьи будет ссылка на игру, пока на Google Play.

Монетизация.

- реклама после успешного прохождения каждого 2-го уровня. Если выключить интернет - рекламы не будет. Читал недавно в комментариях, что людям не нравиться очень много рекламы - если будет фидбек здесь или в маркете, чтобы уменьшить показ рекламы - сделаю.

- внутриигровые покупки на покупку жизней и отключение рекламы.

Рекламу вставил от Appodeal, т.к. это быстро и просто. Ранее я пробовал с ней работать. Нужно было быстро, т.к. я уже выбивался из сроков. Да-да, надо ставить себе сроки (+ определиться с тем, что надо сделать до релиза, а что оставить на потом), иначе можно игру и не закончить.

Продвижение.

Только начал. Но перед этим, считаю, нужно хотя бы трейлер сделать. Не знаю как другие, а мне проще посмотреть, чем почитать, т.к. хвалиться все могут, часть из описания мне будет не понятна, т.к. я еще не играл, а в ролике видно то, что я увижу у себя на экране телефона. Для захвата видео с экрана и монтажа я использовал "Camtasia Screen Recorder and Video Editor". С сайта можно скачать триальную версию. Мне она очень понравилась, т.к. у меня не было опыта в видеомонтаже, а в ней все получилось с первого раза.

Эпилог.

В сухом остатке: 10 месяцев (выпустил в конце мая) разработки, 330 коммитов, хз сколько часов, бесценный опыт. Проект удался, т.к. он закончен, т.е. продукт выпущен.Принесет ли это прибыль - не известно. Надеюсь, игра найдет своих игроков, которым он придется по вкусу. Все зависит от раскрутки - узнает ли потенциальный пользователь про нее.

Послесловие.

Надеюсь, кому-нибудь будет полезным этот пост. Есть идея, ты ей горишь, вперед, все у тебя обязательно получить.

Спасибо за внимание.

Ну и в самом конце ссылки:

E-mail: sokopango@greengophergames.com

Материал опубликован пользователем. Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Егор Нестёркин", "author_type": "self", "tags": [], "comments": 39, "likes": 93, "favorites": 30, "is_advertisement": false, "subsite_label": "indie", "id": 56437, "is_wide": false, "is_ugc": true, "date": "Fri, 28 Jun 2019 02:44:28 +0300" }
{ "id": 56437, "author_id": 146091, "diff_limit": 1000, "urls": {"diff":"\/comments\/56437\/get","add":"\/comments\/56437\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/56437"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64960, "last_count_and_date": null }
39 комментариев

Популярные

По порядку

Написать комментарий...
11

Сумбурно, скомкано, куча грамматических ошибок, но много практической инфы, в целом, понравилось! Похоже на репортаж с передовой)) Удачи афтару!)

Ответить
1

Ну так автор программист, а не копирайтер)

Ответить
0

Спасибо за комментарий.
Да скомкано. Писал быстро, без особой вычитки, ибо надо быстрее рассказать об игре, надейся на успех. Может это и не правильно.
Три грамматические ошибки исправил, больше не нашел. Некоторые обороты поправил . Много англицизма.

Ответить
1

Я наверно резковато высказался. Мне ошибки особо не мешали) Главное- смысловая нагрузка на месте)

Ответить
2

Привет от других 1С-ников, ушедших в геймдев) Через месяц пишите статью о первых доходах)

Ответить
0

Если игра будет одобрена в AppStore, напишу отдельно пост про выпуск игры под iOS - с чем столкнулся при выпуске игры под эту платформу. В тексте немного есть об этом.

Ответить
0

Да, ещё 2 статьи надо:
О продвижении и о доходах.
Очень было бы интересно)

Ответить
0

Я так понимаю в этой ветке программисты 1С любящие геймдев отмечаются? :)

Ответить
0

Механика вроде интересная, графика страшная.

Ответить
0

Как смог.
Рассчитываю, что будут играть не из-за графики.

Ответить
1

Спасибо, не подумал.
От туда качал эмулятор и диск, проходил все уровни, чтобы у себя их реализовать.

Ответить
0

Я когда то в школе начинал изучение программирования на Агатах. Там был установлен КуМИР и манипулятор черепашка :). Ностальгия блин.

Ответить
0

Нашел пару багов.
Первый критичный: запустил игру, вышел в главный экран, снова запустил игру, главного героя нет.
(См. Картинку)

Второй баг проявился на моем устройстве. У меня MIUI Xiaomi. Включен режим жестов, то есть отключены кнопки управления на экране. И я не смог выйти из игры, пришлось перезагружать устройство. Жест выхода не сработал. Остальные полноэкранные приложения работают нормально с этим жестом и выходят. при повторном его действии.

Ответить
0

1) Баг разовый или постоянный?
2) У меня не работает стандартная кнопка Back - не получилось пока реализовать. Скорее всего из-за этого и жест у вас не сработал. Займусь этой проблемой - постараюсь в ближайшие дни решить проблему. Спасибо.
Пока писал п. 2 в голову пришла идея, как исправить проблему - отловить действие кнопки Back на Андроиде. Знаю про событие "Android Back" - но в виджете оно у меня не срабатывает.

Ответить
0

Скорее всего этот жест означает нажатие на кнопку "Домой". Но я не уверен, надо тестировать :)
Кстати могу помочь в тестировании.

Ответить
1

Home работает, а вот Back - точно нет. Как писал выше - уже пробовал реализовать функциональность этой кнопки, но не получилось.
Тестировать уже не надо, т.к. релиз игры был почти месяц назад. А вот поиграть можете, и если что-то найдете - пишите (сюда, в группу ВК, Твиттер, почту, маркет) - тоже самое тестирование вроде как.
Если не затруднит, можете еще раз запустить игру и проверить - будет ли герой на месте или нет. Друг когда тестировал - у него был такой глюк как-то, но потом вроде не воспроизводился, либо не тестировал на том телефоне. Кстати, у него тоже Xiaomi.
Спасибо.

Ответить
0

Баг повторяется если заблокировать телефон.
То есть кейс такой:
- Начинаем уровень.
- Жмем Домой в настройках.
- Блокируем телефон.
- Разблокируем телефон.
- Начинаем уровень.
- Персонажа нет.

Ответить
0

Ну раз предлагали потестировать - могу скинуть Development-сборку, где будут отображаться координаты героя. Поставите, посмотрите, данные.
Если согласны, позже могу скинуть.
З.Ы.: если немного подождать (2-3 секунды) уровень не заканчивается? Если заканчивается, значит персонаж погибает, если нет - то значит где-то находится.

Ответить
0

Не заканчивается

Ответить
0

Ещё потестил.
Баг возникает только если при первом запуске подвигать персонажа.
Персонаж есть на поле, но невидим.

Ответить
0

Повторяемость не стал проверять так как устройство нужно перезагружать из-за второго бага 😁

Ответить
0

Прошел ровно год, у меня борода..

Ответить
0

Буду признателен, если кто-нибудь скажет, как вывести видео/картинку в ленту. У меня не получается - в настройках блока нажимаю "Вывести в ленту", либо жму на звездочку - не помогает.
Спасибо.

Ответить
0

У вас сейчас уже выводится 2 блока.
Один из них уберите из вывода, или просто склейте эти два блока в один.
А вторым блоком выведите видео или картинку.

Ответить
0

Спасибо, буду знать - только 2 блока в ленту.

Ответить
0

На самом деле я только об этом узнал)

Ответить
0

Ну вирутальная машина с макос легко подымается на vmware. Да отлаживать сложно и требуется не слабый ПК. Но собирать проект возможно. Сам так делал.

Ответить
0

У меня AMD, а нужен Intel. Ставил VMWare и качал образ с установленной MacOS - много что пробовал делать (разные настройки, VirtualBox, пр.) - не получилось.

Ответить
0

Так вроде не должно быть проблем если SSE 4.1 поддерживает. Но я сам только на интеле запускал. Надо будет на АМД проверить.

Ответить
0

Спасибо за статью! Еще раз понимаю, что геймдев - не моё...

Ответить
0

А почему у этой игры так много лайков?

Ответить
0

«Написал сообщение, отправил на ревью (в приложении ничего не исправлял), уже неделя прошла - тишина.»

Обычно отвечают в течении суток. Что-то не так. Вы просто ответили им на reject? Или залили новую сборку?

Скорее всего имеется ввиду не то что она на деньги, а то что там есть монетизация.

Ответить
0

Ответил в центре решений и заново отправил на ревью ту же сборку, т.к. где-то было написано, что не обязательно загружать новую сборку.

Само сообщение:
Guideline 2.3.1 - Performance
We discovered that your app contains hidden features. Attempting to hide features, functionality or content in your app is considered egregious behavior and can lead to removal from the Apple Developer Program.
Specifically, your app contains real money gambling functionality without the necessary licensing and permissions.
If you feel that we have misunderstood how your app functions and that your app is compliant with the App Store Review Guidelines, please reply to this message in Resolution Center to explain how this feature works.
The next submission of this app may require a longer review time, and this app will not be eligible for an expedited review until this issue is resolved.

Попробую загрузить новую сборку, и после ее одобрения (кто не в курсе - есть одобрение сборки, а есть одобрение приложения, чтобы оно попало в App Store - примерно так) отправлю на ревью.
Спасибо.

Ответить
0

Промахнулся, с ответом)

Ответить
0

В таких случаях не нужно заливать новый билд. Просто в том чате нужно доказать, что
"- внутриигровые покупки на покупку жизней и отключение рекламы."
сделано по правилам и проценты не идут мимо кошелька Apple. Там можно (рекомендуется) прикладывать видео и скриншоты.
Держите в курсе, интересно)

Ответить
0

В Appodeal еще есть такой пункт.

2. Add usage descriptions to info.plist

If your app gets rejected by the App Store due to missing usage descriptions, add them to your info.plist file:

Copy
<key>NSLocationWhenInUseUsageDescription</key>
<string>Advertising</string>
<key>NSCalendarsUsageDescription</key>
<string>Advertising</string>

Ответить
0

Нашел в документации - это если разрабатывать в XCode - на swift или ObjC (https://wiki.appodeal.com/en/ios/2-4-10-ios-sdk-integration-guide).
А в разделе для UE (https://wiki.appodeal.com/en/ios/2-4-10-ios-sdk-integration-guide) ничего не сказано, только добавить флаг линковки. Только сейчас это заметил, добавлю, соберу.

в "%ProjectName%/Saved/StagedBuilds/IOS/info.plist" есть следующие строки:
<string>></string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>$(PRODUCT_NAME) needs your location to provide personalised advertising experience tailored to you</string>
<key>NSCalendarsUsageDescription</key>
<string>$(PRODUCT_NAME) needs your calendar to provide personalised advertising experience tailored to you</string>
Что, думаю, эквивалентно тому, что вы написали, и есть в документации.

Ответить
0

Я так и сделал - написал немного по английски, потом больше по русски. Скриншот добавил. Неделю молчали. Почитал ваш комментарий, отменил ревью, сейчас соберу приложение заново, проверю, и залью. Как пройдет одобрение билда, отправлю приложение на ревью.

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]
Уве Болл вернулся в кино
и начал экранизировать flash-игры
Подписаться на push-уведомления