Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Игра рыбалка представляет собой полноценный симулятор рыбалки и дает возможность порыбачить в реально существующих местах из жизни и поймать рыбу, которая там обитает.

Рыбный дождь

Спорт, Симуляторы, Рыбалка

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

Gamedev + Покупка

С этим тегом используют

Инди Разработка Инди игра Игры Unity Компьютерные игры YouTube AliExpress Скидки Товары Магазин Акции Промокод Негатив Все
3 поста сначала свежее
30
monobogdan
monobogdan
Посты о ремонте и моддинге ретрогаджетов.
TECHNO BROTHER
8 месяцев назад

Вышел новый видос: о разработке 2D-игра под ведра с нуля без каких либо движков⁠⁠

Видос в формате научпопа, все попытался объяснить простым языком. А если кому-то лень смотреть, есть текстовая версия на Пикабу.

[моё] Гаджеты Покупка Смартфон Android Игры Gamedev Программирование Java Код Видео YouTube
2
320
monobogdan
monobogdan
1 год назад
TECHNO BROTHER

На помойку? Никак нет! Пишем нативные приложения для дешевых китайских телефонов⁠⁠

На помойку? Никак нет! Пишем нативные приложения для дешевых китайских телефонов Опрос, Программирование, Покупка, Китайские товары, Китайцы, Китай, Подделка, Копия, Реплики, Своими руками, C++, 2D, Телефон, Смартфон, Гаджеты, IT, Gamedev, Видео, Без звука, Вертикальное видео, YouTube, Длиннопост



Если сейчас приехать в пункт приема металлолома, то можно обнаружить просто огромные кучи различных телефонов и прочих электронных «отходов», которые стоят под открытым небом и ждут, когда придёт их черёд окончательного разложения. Однако при ближайшем рассмотрении выясняется, что многие девайсы оказываются полностью рабочими даже после недельного лежания под палящим солнцем и проливными дождями, а сдали их в чермет по причинам «не нужен, надоел, купил новый» и т. п. Я не считаю это правильным, ведь даже в простые кнопочные звонилки имеется возможность вдохнуть новую жизнь, если знать один интересный, но малоизвестный факт: для них можно писать нативные приложения на C и использовать железо телефона в своих целях. А это, на минуточку, как минимум: дисплей с подсветкой, вибромотор, динамик, клавиатура и GSM-радиомодуль с возможностью выхода в сеть. Сегодня мы с вами: узнаем, на каких аппаратных платформах работают китайские телефоны, какие существуют программные платформы и где взять для них SDK, а в практической части мы напишем 2D-игру с нуля, которая будет работать на многих китайских кнопочниках. Интересно? Тогда жду вас под катом!

Содержание:

  • Не J2ME едины

  • Аппаратные ресурсы

  • Кроссплатформенный рантайм

  • Кроссплатформенный рантайм: Win32

  • Кроссплатформенный рантайм: MRE

  • Кроссплатформенный рантайм: VXP

  • Наконец-то пишем игру

  • Тестируем на реальных девайсах

  • Заключение


❯ Не J2ME едины


Думаю, многие мои читатели помнят о такой платформе, как J2ME. Java-приложения стали фактически основной возможностью расширения функционала телефонов в 2000-х годах. API для них был достаточно хорошо стандартизировано, программы не зависели от архитектуры процессора и ОС устройства, а порог вхождения для написания собственных приложений был довольно низкий и даже новички могли за пару дней написать свою игрушку или какое-нибудь GUI-приложение!

На помойку? Никак нет! Пишем нативные приложения для дешевых китайских телефонов Опрос, Программирование, Покупка, Китайские товары, Китайцы, Китай, Подделка, Копия, Реплики, Своими руками, C++, 2D, Телефон, Смартфон, Гаджеты, IT, Gamedev, Видео, Без звука, Вертикальное видео, YouTube, Длиннопост

Однако не одним J2ME мы были едины: существовало множество платформ, которые так или иначе пытались занять нишу Java на рынке. Некоторые из них я упоминал в своей прошлой статье о написании 3D-игры под Sony Ericsson с нуля: например, была такая платформа на телефонах Sony Ericsson серии T, как Mophun, а CDMA-телефонами с чипсетами Qualcomm использовалась нативная платформа BREW. Пожалуй, я не буду упоминать о .sis и .cab — поскольку это форматы нативных приложений для смартфонов, а не простых «фичефонов».

В какой-то момент, ближе к 2006-2007 году, прилавки российских официальных ритейлеров (по большей части это были телефоны Fly) и неофициальных продавцов на рынках заполонили различные китайские телефоны, которые предлагали какой-то немыслимый функционал для тех лет за копейки, да ещё и визуально напоминали флагманские модели известных брендов. Пожалуй, одним из самых популярных таких телефонов была Nokla TV E71/E72 (да, именно «нокла»), вышедшая примерно в 2008 году и производившаяся аж до 2011 года! За 2-3 тысячи рублей (это менее 100 баксов), пользователь получал здоровый 2.4" дисплей с разрешением 240x320 весьма неплохого качества (когда в те годы многие продолжали ходить с 176x220), да ещё и с тачскрином, гироскоп, огромный громкий динамик (пусть и не очень качественный), поддержку SD-карточек до 32Гб, нередко фронтальную камеру, а также премиальный дизайн с вставками из алюминия. Частенько китайцы заботливо клали в коробку ещё чехольчик и дополнительный аккумулятор :)

На помойку? Никак нет! Пишем нативные приложения для дешевых китайских телефонов Опрос, Программирование, Покупка, Китайские товары, Китайцы, Китай, Подделка, Копия, Реплики, Своими руками, C++, 2D, Телефон, Смартфон, Гаджеты, IT, Gamedev, Видео, Без звука, Вертикальное видео, YouTube, Длиннопост

Были даже полные копии существующих устройств от Nokia. Особенно китайцы любили подделывать массовые модели на S40: они были очень популярными и китайцы хотели откусить свой кусок рынка у Nokia. Пусть и рынка серого импорта — очевидно, в салонах связи подделки никто не продавал:

Но была и ложка дёгтя в этой бочке меда: китайские телефоны очень часто не имели поддержки Java, из-за чего многие пользователи разочаровывались в них из-за отсутствия возможности установить необходимые им приложения. Никакой тебе оперы, аськи, игр… Скорее всего, это связано с необходимостью отчислений Sun, а также разработчикам реализации J2ME-машины (JBed/JBlend) и установки чипа флэш-памяти чуть большего объёма.

Но многие пользователи не знали, что такие девайсы не просто поддерживали сторонние приложения, но и умели выполнять настоящие нативные программы, написанные на полноценном C! Всему помешала китайская костыльность и тотальная закрытость. Платформа предполагалась для работы на внутреннем рынке. Для вызова менеджера нативных приложений необходимо было вводить специальный инженерный код в номеронабирателе, предварительно скопировав приложение в нужную папку, а SDK долгое время было платным и доступно только для компаний из Китая. Кроме того, далеко не все приложения могли запустить на конкретном девайсе — были серьезные проблемы с совместимостью.

На помойку? Никак нет! Пишем нативные приложения для дешевых китайских телефонов Опрос, Программирование, Покупка, Китайские товары, Китайцы, Китай, Подделка, Копия, Реплики, Своими руками, C++, 2D, Телефон, Смартфон, Гаджеты, IT, Gamedev, Видео, Без звука, Вертикальное видео, YouTube, Длиннопост

Всё как вы любите: HiTech-девайсы на фоне ковра, который старше автора лет на 30 :)

В ранних китайских телефонах использовалась платформа Mythroad (MRP, MiniJ) от китайской компании SkyWorks, которая лицензировала свою технологию производителям чипсетов. Поддержку MRP можно было встретить на телефонах с чипсетами MediaTek, Spreadtrum, а также MStar (и возможно Coolsand). Mythroad предоставлял некоторое API для работы с железом телефона и разработки как UI-приложений, так и игр, кроме того, Mythroad позволял хранить ресурсы в одном бинарнике с основной программой и даже имел какой-то интерпретируемый язык помимо возможности запуска нативного кода. Для работы таких приложений необходимо было скопировать менеджер приложений dsm_gm.mrp и игру в папку mythroad во внутренней памяти устройства или на флэшке, а затем набрать в номеронабирателе код *#220807#, иногда при отключенной первой SIM-карте. Костыльно? Костыльно! Откуда об этом знать среднестатистическому пользователю? Не откуда! Но работало!

Эта платформа поддерживалась на большинстве подделок под брендовые устройства Nokia, Sony Ericsson и Samsung, а также iPhone и на многих китайских кнопочных телефонах 2008-2010 годов.

На помойку? Никак нет! Пишем нативные приложения для дешевых китайских телефонов Опрос, Программирование, Покупка, Китайские товары, Китайцы, Китай, Подделка, Копия, Реплики, Своими руками, C++, 2D, Телефон, Смартфон, Гаджеты, IT, Gamedev, Видео, Без звука, Вертикальное видео, YouTube, Длиннопост

Ближе к 2010 году MediaTek разработала свою собственную платформу, которая должна была заменить MRP — WRE (VXP). Эта платформа была гораздо шире с точки зрения функционала (например, был доступ к UART) и её API был вполне удобно читаем для программиста, а SDK свободно доступен для всех. Один нюанс всё портил — приложения без подписи привязывались к IMSI (даже не IMEI) симки в девайсе и на некоторых девайсах требовали переподписания под каждую конкретную SIM или патчинг дампа оригинальной прошивки телефона на отключение проверки подписи. Эта платформа поддерживалась на многих кнопочниках и смарт-часиках 2010-2020 годов: к ним относятся новодельные телефоны Nokia, телефоны DNS и DEXP, Explay и т. п. Для запуска приложений достаточно было выбрать файл с разрешением VXP в проводнике и просто запустить его. Но с совместимостью всё равно имелись проблемы: если запустить VXP для версии 2.0 и выше, мы получим лишь белый экран. Ну хоть не софтресет, и на том спасибо!

На помойку? Никак нет! Пишем нативные приложения для дешевых китайских телефонов Опрос, Программирование, Покупка, Китайские товары, Китайцы, Китай, Подделка, Копия, Реплики, Своими руками, C++, 2D, Телефон, Смартфон, Гаджеты, IT, Gamedev, Видео, Без звука, Вертикальное видео, YouTube, Длиннопост

Далеко не все такие часы поддерживают MRE, смотреть нужно от устройства к устройству


❯ Аппаратные ресурсы


Большинство китайских кнопочных телефонов работает на базе одних и тех же чипсетов. В конце нулевых чаще всего использовались чипсеты MT6225, SC6520 и некоторые чипы от Coolsand. Средние хар-ки девайса были следующими:

  • Процессор: ARMv5 ядро на частоте ~104МГц, ARM926EJ-S. Нет FPU, есть Thumb. Большую часть процессорного времени программа могла забрать себе.

  • ОЗУ: ~4Мб SDRAM. Программам было доступно 512Кб-1Мб Heap'а. Это, в целом, довольно немало для большинства применений.

  • Флэш-память: ~32Мб, пользователю доступно пару сотен килобайт. Да, вы не ослышались, килобайт! Однако можно без проблем использовать MicroSD-флэшки до 32Гб.

  • Дисплей: от 128x128 до 320x480, почти всегда есть 18-битный цвет (262.000 цветов), в случае TV E71/E72 используется очень неплохая TN-матрица с хорошими углами обзора и яркой подсветкой. Иногда есть тачскрин.

  • Звук: громкий динамик, наушники.

  • Аккумулятор: ~800мАч, на некоторых девайсах может быть и 2.000мАч, а то и больше!

  • Ввод: клавиатура, иногда была поддержка QWERTY.

  • Внешние шины: почти всегда был доступен UART, причём его можно было свободно взять прямо с платы — он был явно подмечен! Взять GPIO с проца не выйдет (кроме, возможно, вибромотора), SPI и I2C также напрямую недоступны. Внешние шины можно реализовать с помощью UART через GPIO-мост из микроконтроллера.


В итоге мы получаем очень неплохие характеристики для устройства, которое сочетает в себе сразу всё. На базе такого девайса можно сделать и сигнализацию, и HMI-дисплей с интерфейсом для управления каким-нибудь устройством, и игровую консоль с эмуляторами… да на что фантазии хватает! И это за какие-то 200-300 рублей, если мы говорим о б/у устройстве или 600 рублей, если говорим о новом. Это дешевле, чем собирать девайс с подобным функционалом самому из готового МК (например, RP2040) и отдельных модулей. Кстати, дешевые 2.4" дисплеи на алике — это ни что иное, как невостребованные остатки дисплеев для подобных китайских телефонов на складах! А вы думали, откуда там значки на тачскрине снизу?

На помойку? Никак нет! Пишем нативные приложения для дешевых китайских телефонов Опрос, Программирование, Покупка, Китайские товары, Китайцы, Китай, Подделка, Копия, Реплики, Своими руками, C++, 2D, Телефон, Смартфон, Гаджеты, IT, Gamedev, Видео, Без звука, Вертикальное видео, YouTube, Длиннопост

Однако в рамках данной статьи мы не будем ограничиваться лишь теорией и на практике напишем примитивную 2D-игрушку, которая будет работать сразу на трех платформах без каких-либо изменений в коде самой игры: Windows, MRP (Mythroad) и VXP. Но для того, чтобы достигнуть такого уровня абстракции от платформы, нам необходимо написать рантайм, который оборачивает все необходимые платформозависимые функции для нашей игры.

Игрушка будет простой: 2D скролл-шутер с видом сверху, а-ля Asteroids. Летаем по космосу, и стреляем по враждебным корабликам, стараясь не попасть под вражеские лазеры. Всё просто и понятно :)


❯ Практическая часть: Кроссплатформенный рантайм


Итак, что нам необходимо от абстракции для такой простой игры? Давайте посмотрим:

  • Графика: очистка экрана, отрисовка спрайтов с прозрачностью (без альфа-блендинга, только колоркей), отрисовка текста. При возможности, желательно использовать нативное API системы для рисования графики, а не городить собственный блиттер. Формат пикселя фиксирован: RGB565 (65к цветов).

  • Ресурсы: хранятся в одном образе с основной игрой. Фактически, все ресурсы упакованы в виде обычных массивов байт в заголовочных файлах. Я пользуюсь вот этой тулзой для конвертации спрайтов в массивы байтов.

  • Звук: воспроизведение хотя-бы одного WAV-потока. Почему одного? Потому что далеко не на всех платформах есть доступ к аппаратному микшеру… да и вообще не везде есть прямой доступ к PCM (привет MRP), иногда разработчики ограничиваются лишь одним каналом для WAV-звука без возможности воспроизведения нескольких аудиофайлов одновременно.

  • Ввод: абстракция от клавиатуры классического моноблока: стрелки, OK, левый и правые софткеи.

  • Стандартная библиотека: не на всех платформах можно вызывать функции напрямую из stdlib. Как минимум в MRP и, например, «эльфах» для Motorola, нет возможности вызывать аллокатор, rand и некоторые другие функции из обычных заголовочников стандартной библиотеки. На таких платформах, системные инклуды дефайнами подменяют стандартные функции на своих реализации:

    #define malloc system_alloc

    #define free system_free


    Но если у нас игра кроссплатформенная, то и платформозависимые инклуды мы использовать не будем.

Выглядит всё достаточно просто, верно? Примерно такого набора функций хватит для нашей игры:

На помойку? Никак нет! Пишем нативные приложения для дешевых китайских телефонов Опрос, Программирование, Покупка, Китайские товары, Китайцы, Китай, Подделка, Копия, Реплики, Своими руками, C++, 2D, Телефон, Смартфон, Гаджеты, IT, Gamedev, Видео, Без звука, Вертикальное видео, YouTube, Длиннопост


❯ Win32


Давайте же перейдем к реализации рантайма на каждой платформе по отдельности. Начнём с Win32, поскольку адекватно отлаживать игру можно только на ПК.

На помойку? Никак нет! Пишем нативные приложения для дешевых китайских телефонов Опрос, Программирование, Покупка, Китайские товары, Китайцы, Китай, Подделка, Копия, Реплики, Своими руками, C++, 2D, Телефон, Смартфон, Гаджеты, IT, Gamedev, Видео, Без звука, Вертикальное видео, YouTube, Длиннопост

На десктопе у нас будет фиксированное окно 240x320, в качестве GAPI будет использоваться аппаратно-ускоренный OpenGL, а для обработки ввода будет использоваться классически GetAsyncKeyState. Реализация точки входа, создания окна и инициализации контекста GL и главного цикла приложения у нас такая:

На помойку? Никак нет! Пишем нативные приложения для дешевых китайских телефонов Опрос, Программирование, Покупка, Китайские товары, Китайцы, Китай, Подделка, Копия, Реплики, Своими руками, C++, 2D, Телефон, Смартфон, Гаджеты, IT, Gamedev, Видео, Без звука, Вертикальное видео, YouTube, Длиннопост

Реализация отрисовки спрайтов очень примитивная — OGL 1.0, полностью FFP, вся отрисовка — это 2 треугольника, формирующие квад. Спрайт заливается при первом использовании в текстуру, последующие кадры реюзается уже готовая текстура. Фактическая реализация всего рендерера — т. е. функций для рисования «просто картинок», без поддержки атласов, блендинга цветов (З.Ы - длинные листинги будут на пастбине, на Пикабу нет нормального тега для кода):

https://pastebin.com/BmbqyBjd

С вводом тоже всё просто. Есть биндинг кнопок клавиатуры к кнопкам на кейпаде телефона. inGetKeyState предполагается вызывать один раз за кадр, поэтому функция опрашивает ОС о состоянии нажатых кнопок на клавиатуре и назначает состояние виртуальных кнопок относительно состояния физических кнопок на клавиатуре.

На помойку? Никак нет! Пишем нативные приложения для дешевых китайских телефонов Опрос, Программирование, Покупка, Китайские товары, Китайцы, Китай, Подделка, Копия, Реплики, Своими руками, C++, 2D, Телефон, Смартфон, Гаджеты, IT, Gamedev, Видео, Без звука, Вертикальное видео, YouTube, Длиннопост

Результат:

На помойку? Никак нет! Пишем нативные приложения для дешевых китайских телефонов Опрос, Программирование, Покупка, Китайские товары, Китайцы, Китай, Подделка, Копия, Реплики, Своими руками, C++, 2D, Телефон, Смартфон, Гаджеты, IT, Gamedev, Видео, Без звука, Вертикальное видео, YouTube, Длиннопост

❯ MiniJ


Переходим к реализации рантайма для первой китайской платформы — MRP. Обратите внимание — я использую нативное API платформы для рисования спрайтов. Связано это с тем, что софтварный блиттер работает невероятно медленно даже с прямым доступом к скринбуферу устройства, а в чипсете предусмотрена отдельная графическая подсистема с командбуфером для быстрой отрисовки примитивов и графики:

SDK для MRE можно найти здесь (SKYSDK.zip): оно уже пропатчено от необходимости покупки лицензии. MRP не развивается более 10 лет, поэтому, думаю, его можно считать Abandonware. Компилятор находится в compiler/mrpbuilder.NET1.exe. За китайские SDK в публичном доступе нужно поблагодарить пользователя 4pda AjlekcaHgp MejlbHukoB, который раздобыл их на всяких csdn и выложил в свободный доступ :)

У MRP собственная система сборки, основанная на конфигурациях. Поскольку MRP может работать на устройствах с разными платформами и размерами дисплеев, под каждую можно настроить свой конфиг, который пережмет ресурсы в нужный формат. Дабы ничего не ломать, я заюзал абсолютные пути:

На помойку? Никак нет! Пишем нативные приложения для дешевых китайских телефонов Опрос, Программирование, Покупка, Китайские товары, Китайцы, Китай, Подделка, Копия, Реплики, Своими руками, C++, 2D, Телефон, Смартфон, Гаджеты, IT, Gamedev, Видео, Без звука, Вертикальное видео, YouTube, Длиннопост

Компиляция приложения:

mrpbuilder.net1.exe game.mpr

Начинаем с функций обработки событий и инициализации, которые вызывает рантайм при старте приложения: mrc_init вызывается при старте приложения, а mrc_event при возникновении события. Вся инициализация очень простая: создаём таймер для обновления и перерисовки состояния игры и вызываем инициализацию игры:

На помойку? Никак нет! Пишем нативные приложения для дешевых китайских телефонов Опрос, Программирование, Покупка, Китайские товары, Китайцы, Китай, Подделка, Копия, Реплики, Своими руками, C++, 2D, Телефон, Смартфон, Гаджеты, IT, Gamedev, Видео, Без звука, Вертикальное видео, YouTube, Длиннопост

С вводом тоже никаких проблем нет, нажатия кнопок прилетают как события в mrc_event. Переводим кейкоды MRE в наши кейкоды и сохраняем их состояние:

На помойку? Никак нет! Пишем нативные приложения для дешевых китайских телефонов Опрос, Программирование, Покупка, Китайские товары, Китайцы, Китай, Подделка, Копия, Реплики, Своими руками, C++, 2D, Телефон, Смартфон, Гаджеты, IT, Gamedev, Видео, Без звука, Вертикальное видео, YouTube, Длиннопост

Опять же, отлаживать MRP-приложение под реальным устройством проблематично, поэтому платформозависимый код должен быть минимальным. Кроме того, обратите внимание, что некоторые функции в MRP зависят от библиотек-плагинов. Линкер слинкует вашу программу, но на реальном устройстве их вызов вывалится в SIGSEGV и софтресет устройства. Также нельзя использовать ничего из стандартной библиотеки именно в стандартных заголовочниках (т. е. stdlib.h, string.h и т. д.), часть стандартной библиотеки реализовывается MRP и дефайнится в mrc_base.h

На помойку? Никак нет! Пишем нативные приложения для дешевых китайских телефонов Опрос, Программирование, Покупка, Китайские товары, Китайцы, Китай, Подделка, Копия, Реплики, Своими руками, C++, 2D, Телефон, Смартфон, Гаджеты, IT, Gamedev, Видео, Без звука, Вертикальное видео, YouTube, Длиннопост

Что интересно, защиты памяти толком нет. Если приложение падает в SIGSEGV или портит память — систему, судя по всему, ребутит Watchdog. Защиты памяти никакой, можно напрямую читать и писать в память ядра, а также писать в регистры периферии чипсета. jpegqs, покумекаем над этим? :)

Переходим к рендереру. Тут буквально две функции, gClearScreen очищает экран, а gDrawBitmap рисует произвольный спрайт с форматом пикселя RGB565. В качестве ROP используется BM_TRANSPARENT — таким образом, mrc_bitmapShowEx будет использовать левый верхний пиксель в качестве референсного цвета для реализации прозрачности без альфа-блендинга.

void gDrawBitmap(CBitmap* bmp, int x, int y) {

mrc_bitmapShowEx((uint16*)bmp->pixels, x, y, bmp->width, bmp->width, bmp->height, BM_TRANSPARENT, 0, 0);

}

Да, всё вот так просто. Рантайм теперь запускается на реальных китайских девайсах и работает стабильно.

❯ VXP


Теперь переходим к VXP — платформе не менее неоднозначной, чем MRP. Пожалуй, начать стоит с того, что VXP существует аж в трёх версиях: MRE 1.0, MRE 2.0 и MRE 3.0. В MRE 2.0 и выше появилась поддержка плюсов (в MRE 1.0 только Plain C) и довольно интересного GUI-фреймворка, MRE 1.0 же предлагает реализовывать гуй самому. Платформа распространена на большинстве кнопочных телефонов и смарт-часиков на чипсетах MediaTek, примерно начиная с 6235 и заканчивания 6261D. SDK можно скачать вот здесь (см MRE_SDK_3.0).

VXP сам по себе более функционален чем MRE, поскольку ориентирован исключительно на телефоны с чипсетами MediaTek. Но что самое приятное — есть доступ к уарту без каких либо костылей! То есть, если сделать GPIO-мост на условной ESP32, то мы можем получить готовый мощный МК с клавиатурой, кнопками, дисплеем, звуком и т. д. Звучит не хило, да? Кроме того, у нас есть доступ и к BT, и к GPRS, и к SMS без каких либо ограничений.

На помойку? Никак нет! Пишем нативные приложения для дешевых китайских телефонов Опрос, Программирование, Покупка, Китайские товары, Китайцы, Китай, Подделка, Копия, Реплики, Своими руками, C++, 2D, Телефон, Смартфон, Гаджеты, IT, Gamedev, Видео, Без звука, Вертикальное видео, YouTube, Длиннопост

Однако в бочке мёда нашлась и ложка дёгтя: для компиляции MRE-приложений необходимо накатывать и крякать довольно старый компилятор ADS, который сам по себе поддерживает только C89 (например, нет возможности объявить переменную в объявлении цикла или середине функции, только в начале, как в Pascal). ADS уже вроде как Abandonware, так что это вроде не наказуемо… но всё равно неприятно.

Кроме того, на некоторых девайсах (в основном, фирменных Nokia а-ля 225), прошивка требует подписи у всех бинарников, либо если бинарник отладочный, то должна быть привязка к конкретному IMSI.

К тому же, каждая программа должна фиксированно указывать в заголовке, сколько Heap-памяти ей необходимо выделить. Оптимальный вариант — ~500Кб, тогда приложение запустится вообще на всех MRE-телефонах.

Зато у VXP есть адекватный симулятор под Windows. Но зачем он нам, если у нас порт игры под Win32 есть? :)

Начинаем с инициализации приложения. В процессе вызова точки входа, приложение должно назначить обработчики системных событий, коих бывает несколько. Для обработки ввода и базовых событий хватает всего три: sysevt (события окна), keyboard (физическая клавиатура. Есть полная поддержка QWERTY-клавиатур), pen (тачскрин).

vm_reg_sysevt_callback(handle_sysevt); vm_reg_keyboard_callback(handle_keyevt); vm_reg_pen_callback(handle_penevt);

Переходим к обработчику системных событий. Обратите внимание, что MRE-приложения могут работать в фоне, из-за чего необходимо ответственно подходить к созданию и освобождению объектов. Что важно усвоить с самого начала — в MRE нет понятия процессов и защиты памяти, как на ПК и полноценных смартфонах. Любая программа может попортить память или стек ОС, более того, программа использует аллокатор остальной системы, поэтому если ваша программа не «убирает» после себя, данные останутся в памяти со временем приведут к зависанию. Впрочем, WatchDog делает свою работу быстро и приводит телефон в чувство (софтресетом) за 1-2 секунды. Но как и в случае с MRE, есть приятный бонус: прямой доступ к регистрам чипсета :)

На помойку? Никак нет! Пишем нативные приложения для дешевых китайских телефонов Опрос, Программирование, Покупка, Китайские товары, Китайцы, Китай, Подделка, Копия, Реплики, Своими руками, C++, 2D, Телефон, Смартфон, Гаджеты, IT, Gamedev, Видео, Без звука, Вертикальное видео, YouTube, Длиннопост

Переходим к обработке событий с кнопок. Тут всё абсолютно также, как и на MRE, лишь имена дейфанов поменялись :)

https://pastebin.com/XyHQ49N6

И наконец-то, к графике! Пожалуй, стоит сразу отметить, что более 20-30 FPS на большинстве устройств вы не получите даже с прямым доступом к фреймбуферу. Похоже, это связано с тем, что в MRE довольно замороченная графическая подсистема с поддержкой альфа-канала (только фиксированного во время вызова функции отрисовки картинки/примитивов, сам пиксельформат всегда RGB565) и нескольких слоев. Кроме того, похоже есть ограничения со стороны контроллера дисплея.

Изначально, MRE предполагает то, что все картинки в программе хранятся в формате… GIF. Да, весьма необычный выбор. Однако для работы с пользовательской графикой, есть возможность блиттить произвольные картинки напрямую из RAM. Вот только один нюанс — посмотрите внимательно не объявление следующей функции:

void vm_graphic_blt( VMBYTE * dst_disp_buf, VMINT x_dest, VMINT y_dest, VMBYTE * src_disp_buf, VMINT x_src, VMINT y_src, VMINT width, VMINT height, VMINT frame_index );

dst_disp_buf — это целевой RGB565-буфер. Логично предположить, что и src_disp_buf — тоже обычный RGB565-буфер! Но как бы не так. Документация крайне скудная, пришлось посидеть и покумекать, откуда в обычном 565 буфере возьмется индекс кадра. С подсказкой пришёл пользователь 4pda Ximik_Boda — он скинул структуру-заголовок, которая идёт перед началом каждого кадра. В документации об этом не сказано ровным счетом ничего!

На помойку? Никак нет! Пишем нативные приложения для дешевых китайских телефонов Опрос, Программирование, Покупка, Китайские товары, Китайцы, Китай, Подделка, Копия, Реплики, Своими руками, C++, 2D, Телефон, Смартфон, Гаджеты, IT, Gamedev, Видео, Без звука, Вертикальное видео, YouTube, Длиннопост

Сначала я реализовал софтовый блиттинг, но он безбожно лагал. Мне стало интересно, почему нативный blt быстрее и… вопросы отпали после того, как я поглядел в ДШ чипсета: тут есть аппаратный блиттинг. И даже с ним девайс не может выдать более 20FPS!

На помойку? Никак нет! Пишем нативные приложения для дешевых китайских телефонов Опрос, Программирование, Покупка, Китайские товары, Китайцы, Китай, Подделка, Копия, Реплики, Своими руками, C++, 2D, Телефон, Смартфон, Гаджеты, IT, Gamedev, Видео, Без звука, Вертикальное видео, YouTube, Длиннопост

Для реализации более-менее шустрого вывода графики, необходимо сначала создать канвас (фактически, Bitmap в MRE), создать и привязать к нему layer, получить указатель на буфер слоя и только потом скопировать туда нашу картинку. Да, вот так вот замороченно:

https://pastebin.com/DPrxG6Uj

И только после этого всё заработало достаточно шустро :)
В остальном же платформа довольно неплохая. Да, без болячек не обошлось, но всё же перспективы вполне себе есть.

На данный момент, этого достаточно для нашей игры.

❯ Пишем геймплей


Рантайм у нас есть, а значит, можно начинать писать игрушку. Хоть пишем мы на Plain-C, я всё равно из проекта в проект использую +- одну и ту же архитектуру относительно системы сущностей, стейтов и т. п. Поэтому центральным объектом у нас станет CWorld, который хранит в себе на пулы с указателями на другие объектами в сцене, а также игрока и его состояние:

typedef struct {

CPlayer player;

int nextSpawn; // In ticks

CEnemy* enemyPool[ENEMY_POOL_SIZE];

CProjectile* projectilePool[PROJECTILE_POOL_SIZE];

} CWorld;

Система стейтов простая и понятная — фактически, между состояниями передавать ничего не нужно. При нажатии в главном меню на «старт», нам просто необходимо проинициализировать мир заново и начать геймплей, при смерти игрока — закинуть его обратно в состояние меню. Стейты представляют из себя три указателя на функции: переход (инициализация), обновление и отрисовка.

typedef void(CGameStateCallback)();

Поскольку мы хотим некоторой гибкости при создании новых классов противников, то вводим структуру CEnemyClass, которая описывает визуальную составляющую врагов и их флаги — могут ли они стрелять по игроку или просто летят вниз (астероиды), как они передвигаются (зигзагами например) и т. п.

https://pastebin.com/b3rjz0bV

А также описываем игрока:

typedef struct

{

int health;

int frags;

int score;

int speed;

int nextAttack;

int x, y;

} CPlayer;

Всё! Для текущего уровня реализации игры этого достаточно :)
Переходим к реализации игровой логики. Вообще, динамический аллокатор в играх для китайских платформ лучше использовать как можно меньше. Heap'а довольно мало (~600Кб), да и не совсем понятно, как этот аллокатор реализован, есть вероятность, что используется аллокатор и куча основной ОС.

Начинаем с реализации полёта кораблика. Для этого он должен реагировать на стрелки и не улетать за границы экрана, а ещё для красоты он должен «вылетать» из нижней границы экрана при старте игры:

На помойку? Никак нет! Пишем нативные приложения для дешевых китайских телефонов Опрос, Программирование, Покупка, Китайские товары, Китайцы, Китай, Подделка, Копия, Реплики, Своими руками, C++, 2D, Телефон, Смартфон, Гаджеты, IT, Gamedev, Видео, Без звука, Вертикальное видео, YouTube, Длиннопост

Переходим к динамическим пулам с объектами. Как вы уже заметили, их всего два — враги и летящие снаряды. Реализация спавна врагов/снарядов простая и понятная: мы обходим каждый элемент пула, если указатель на объект не-нулевой, значит объект всё ещё жив и используется на сцене. Если нулевой — значит ячейка свободна и можно заспавнить новый объект:

https://pastebin.com/s8aQYFG5

При обходе пула во время обновления кадра, мы обновляем состояние каждого объекта и если его функция Think вернула true, значит объект больше не нужен и его нужно удалить:

if (enemyThink(world.enemyPool[i]))

{

sysFree(world.enemyPool[i]);

world.enemyPool[i] = 0;

}

А вот и реализация Think:

bool enemyThink(CEnemy* enemy) {

enemy->y += enemy->_class->speed;

if (enemy->y > gGetScreenHeight() || enemy->health <= 0) return true;

return false;

}

Но кораблики должны же откуда-то появляться! Для этого у нас есть переменная nextSpawn, которая позволяет реализовать самый простой тип спавнера — относительно времени (или в нашем случае тиков):

world.nextSpawn--;

if (world.nextSpawn < 0) {

CEnemy* enemy = spawnEnemy(&enemyClasses[0]);

world.nextSpawn = randRange(40, 70);

}

Результат: мы уже можем полетать, пострелять и поуворачиваться от вражеских корабликов!

Уже что-то напоминающее игру! Осталось лишь добавить подсчет очков, менюшку, разные виды противников, возможно какие-то бонусы и у нас будет готовая простенькая аркада. В целом, выше приведена достаточно неплохая архитектура для простых 2D-игр на Plain C. Фактически, она может быть хорошей базой и для ваших игр: в теме о китах на 4pda я встречал немало людей, которые банально не знали, с чего начать.

❯ Что у нас получилось?


Но без тестов на реальных устройствах материал не был бы таким интересным! Поэтому давайте протестируем игру на двух реальных телефонах, как вы уже догадались, один — Nokla TV E71, а второй — клон Nokia 6700, который подарил мне мой читатель Никита.



На TV E71 игра идёт не сказать что очень бодро. Кадров 15 точно есть, что, учитывая разрешение 240x320, весьма неплохо для такого девайса.

а 6700,, даже учитывая более низкое разрешение — 176x220, дела примерно также — ~15FPS! Но поиграть всё равно можно. Уже хотите написать «автор наговнокодил, а теперь ноет из-за низкого FPS»? Ан-нет, я попробовал игры сторонних разработчиков — они идут примерно также :( К сожалению, таковы аппаратные ограничения устройства.

Исходный код игры с Makefile'ами и файлами проектов для Visual Studio и MRELauncher доступны на моём GitHub. Свободно изучайте и используйте его в любых целях :)

❯ Заключение


Но в остальном же, демка получилась довольно прикольной, как и сам опыт программирования для китайских телефонов. В общем и целом, китайцы пытались максимально упростить API и привлечь разработчиков к своей платформе. Если ради примера взглянуть на API для Elf'ов на Motorola, можно ужаснуться от state-based архитектуры платформы P2K. А тут тебе init, event, draw — и всё!

Но популярности помешала непонятная закрытость платформы, костыльный запуск программ, отсутствие нормального симулятора. А ведь сколько фишек было: даже возможность писать и читать память ядра!
А вы как считаете? Можно ли вдохнуть в китайские кнопочники новую жизнь, узнав о наличии возможности запуска нативного кода на них?

P. S.: Друзья! Время от времени я пишу пост о поиске различных китайских девайсов (подделок, реплик, закосов на айфоны, самсунги, сони, HTC и т. п.) для будущих статей. Однако очень часто читатели пишут «где ж ты был месяц назад, мешок таких выбросил!», поэтому я решил в заключение каждой статьи вставлять объявление о поиске девайсов для контента. Есть желание что-то выкинуть или отправить в чермет? Даже нерабочую «невключайку» или полурабочую? А может, у этих девайсов есть шанс на более интересное существование! Смотрите в соответствующем посте, что я делаю с китайскими подделками на айфоны, самсунги, макбуки и айпады! Да и чего уж там говорить: эта статья уже сама по себе весьма наглядный пример! Найти меня можно в комментариях тут, на Пикабу, и в тг @monobogdan

Понравился материал? У меня есть канал в Телеге, куда я публикую бэкстейдж со статей, всякие мысли и советы касательно ремонта и программирования под различные девайсы, а также вовремя публикую ссылки на свои новые статьи. 1-2 поста в день, никакого мусора!

Полезный материал?
Всего голосов:
Были ли у вас такие китайчики?
Всего голосов:

Материал подготовлен при поддержке TimeWeb Cloud. Подписывайтесь на меня и @Timeweb.Cloud, дабы не пропускать новые статьи каждую неделю!

Показать полностью 20 4 2
[моё] Опрос Программирование Покупка Китайские товары Китайцы Китай Подделка Копия Реплики Своими руками C++ 2D Телефон Смартфон Гаджеты IT Gamedev Видео Без звука Вертикальное видео YouTube Длиннопост
55
14
EduardKumykov
EduardKumykov
2 года назад
Лига Разработчиков Видеоигр
Серия Монетизация игр

99 советов по монетизации игр — Часть 2⁠⁠

Не спешите ставить низкие оценки, ведь в этой части я решил пересмотреть подачу и рассказать вам о том, как злые разработчики игр (...и не только мобильных) пытаются манипулировать вашим сознанием и использовать различные уловки, чтобы забрать все ваши денежки. Будьте внимательны и предупредите знакомых!

99 советов по монетизации игр — Часть 2 Gamedev, Длиннопост, Покупка, Монетизация

Вместо введения

Реакция предыдущей части оказалась достаточно двоякой и я прекрасно понимаю ваше недовольство и поэтому, решил преподнести этот материал совсем в другом свете, чтобы приблизить его написание к окончанию. Как читатель, вы будете знать какие трюки используют разработчики игр, и это позволит вам не попасться на их крючок монетизации, а если вы занимаетесь разработкой игр, то эти советы помогут вам сделать монетизацию в своей игре более “мягкой” и приемлемой для игроков.

Вместо оправдания, могу сказать, что есть люди, которые относятся к материалу с пониманием и я решил развивать тему монетизации именно по многочисленным просьбам, которые приходят в личные сообщения.

Возможно, об этом стесняются спрашивать публично, но люди, с которыми я общаюсь именно лично просят рассказать или помочь только по части монетизации, т.к. испытывают с ней проблемы при создании своих игр. Также, есть геймдизайнеры и разработчики, которые занимаются созданием f2p игр и все, ради чего я пишу свои материалы - это вклад в разработку игр… чтобы сделать ее немножечко лучше, а чью-то работу удобнее и осознание. Когда-то, я сам был “зеленым” геймдизайнером и многого не знал, поэтому, надеюсь, что эти советы, как и советы для геймдизайнеров кому-то помогут. И помните, что я не в коем случае никого не хотел бы обидеть…

99 советов по монетизации игр — Часть 2 Gamedev, Длиннопост, Покупка, Монетизация

Я пишу статьи на разные темы и в основном они касаются геймдизайна, общих процессов, нарратива, разработки игр и монетизации и если вам интересны другие мои публикации, то вы сможете найти их в профиле или в моей группе в Telegram. Я развиваю сообщество для разработчиков игр и в группе сможете спросить совета и пообщаться с другими участниками, которых уже более 900! Приятного чтения!

В описании я обещал рассказать вам, что же такого делают злобные разработчики… поэтому запоминайте все уловки, а если вы являетесь разработчиком игр, то старайтесь не допустить в вашей игре похожих проблем, о которых я напишу ниже.

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

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

Вместо монетизации постарайтесь подумать о том, что на рынке, есть множество конкурентов и просто замечательных игр… поэтому в вашей игре нужно сделать что-то такое, что будет как минимум отличать вашу игру от других и выделять ее на фоне остальных, чтобы просто привлечь внимание игроков.

36. Разработчики перекладывают свои проблемы на игроков - во фразе “проблемы с монетизацией” обычно кроется то, что игра вообще не приносит прибыль разработчику или выручка в ней настолько мала, что она не позволяет окупить огромные вложения потраченные на производство. Согласитесь, что это странно?

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

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

Затраты на производство увеличиваются из-за большой команды, требований и высокой стоимости за установку, но если начать с малого и проверить идею, то на этом в начале можно будет хорошо сэкономить. А высокий CPI образуется из-за большого числа конкурентов, поэтому вам действительно нужно удивлять игроков, чтобы они приходили в вашу игру самостоятельно, и тогда вы сможете окупать вложения не только через “paid” трафик, но и через органику, что позволит вам сделать монетизацию мягче.

37. Разработчики принимают игроков за дураков - и еще этот совет может звучать так, что разработчики пытаются вас обмануть. Примеров я видел множество, а иногда, даже слышал от других геймдизайнеров фразы в духе “игроки не умеют считать” и я хочу разочаровать вас… Игроки считают лучше вас и всегда найдутся такие, которые заметят в игре самые серьезные баги, проблемы с геймдизайном, нарративом, экономикой и прочими игровыми механиками.

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

Продолжая предыдущее предложение, можно сказать, что одной из распространенных ошибок при “балансировке” офферов с целью повышения монетизации, бывает то, что разработчики пытаются скрыть реальную выгоду от покупки или стараются заменить более выгодные товары для игроков на “невыгодные” и это всегда работало плохо.

В подтверждение к этому совету можно привести в пример постоянную “любовь” игроков  лутбоксам. Если они не знают, что там лежит и если они понимают, что полученное не соответствует цене, то это очень сильно расстроит их. Сделайте хорошую игру и предложите игроку выгодную покупку, тогда он с удовольствием ее сделает - все просто.

99 советов по монетизации игр — Часть 2 Gamedev, Длиннопост, Покупка, Монетизация

38. Разработчики не понимают вас - причина проста, ведь они очень мало играют в игру, которую делают сами. И этот совет очень важен для всех, кто делает игры - играйте в них много и столько, сколько можете себе позволить. Об этом совете я говорил много раз и писал о нем в других своих материалах, но тут будет очень важно повторить его еще раз в продолжении к предыдущему совету… И если вы действительно хотите понять, что чувствует игрок, когда играет в вашу игру, то вам нужно самому очень много играть в нее. Вам нужно проходить все уровни, все события, совершать покупки и проверять работу всех механик и если вам что-то не нравится, то вряд ли это полюбят и игроки.

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

Иногда, разработчики могут сделать в игре несколько основных механик и добавить геймплея на одну неделю игры, а потом взяться за проверку монетизации, что вроде бы и не плохо, но если их “занесет”, то вы увидите это сразу… Обычно, монетизацию можно проверить добавив в игру несколько офферов или реализовав “внутриигровой магазин”, но если играть не во что, а механики для монетизации появляются при нажатии на каждую кнопку, то вы, как разработчики свернули не в ту сторону.

Очень часто, я видел, что разработчики “пичкают” в свои игры известные всем монетизационные механики надеясь на то, что монетизация заведется, но на моей практике, такие методы не работают. По итогу, можно встретить такие игры, в которых при первом запуске появляется реклама, предложение купить VIP-подписку, свинью-копилку, оффер для новичков, battle pass и все прочее, что можно увидеть в других f2p и это действительно раздражает.

А совет для разработчиков тут можно дать только один - интегрируйте монетизацию аккуратно и поэтапно и точно также проверяйте то, как она работает… ведь если игроки не покупают в вашей игре один оффер, то вряд ли они купят его или что-то другое, если таких офферов будет десяток. Внимательно посмотрите на аналитику и если какой-то оффер составляет 80% из всех покупок, а какой-то 3%, то второй точно лучше убрать. Если в вашей игре есть контент, в который можно играть несколько месяцев и у вас не так много офферов, то только в этот момент можно подумать о расширении системы монетизации и о создании действительно выгодных предложений для игрока.

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

41. Не заходите в игры на праздниках - злобные разработчики игр с удовольствием ждут выходных и праздников, так как у вас будет больше свободного времени и в этот момент вам предложат купить все самое интересное и по выгодным ценам.

На носу новый год? …значит в играх будет куча событий и вам обязательно предложат нарядить елку, купить персонажа в красном колпаке или набор других игровых сущностей с различными подарками, поэтому будьте внимательны! Этот совет идет к предыдущему и вместе с игровыми событиями разработчики будут пытаться “монетизировать” вас по максимуму.

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

42. Вам не скрыться от монетизации - даже если вы ничего не покупаете в играх, разработчики будут следить за вами и предлагать для вас выгодные офферы. Я видел примеры того, как в начале игры мне предлагали купить что-то с выгодой в 150% и по мере прогресса выгода в разных офферах вырастала пока не достигла 1500% и все для того, чтобы я наконец-то совершил покупку.

Такие примеры монетизации не совсем честны к другим игрокам и предлагают мне действительно выгодные предложения, но по крайней мере они выглядят менее агрессивно, если разработчики снижают градус показа офферов и концентрируются только на одном их виде и не показывают мне десятки различных офферов на каждый запуск игры пока я их не куплю.

43. Неопытные разработчики завалят вас офферами - продолжая прошлый совет, можно сказать, что я видел много примеров того, как в один момент в игре предлагалось купить десяток различных офферов. А чтобы сделать игру более-менее приятной, лучше сделать акцент в офферах на два или три дополнительных предложения, которые будут показаны игроку помимо одного или двух основных и на этом можно оставить его в покое.

44. Внимание редко уделяется тем игрокам, которые платят много - раньше, практика выделения VIP игроков использовалось часто, но со временем, разработчики стали от нее отказываться по непонятным причинам. Если игроки оставляли в игре тысячи долларов и сотни часов игрового времени, то они получали в дополнение кучу бесплатных подарков на праздники и выходные, и я даже видел примеры того, как таких игроков обслуживали отдельные менеджеры поддержки 24/7 в игре и за ее пределами.

Сейчас такой практики придерживаются очень и очень редко и мне кажется, что для повышения монетизации нужно внедрять не только ее, а разрабатывать полноценную систему “мотивации и привилегий” для всех игроков, которые заплатили даже $1.

99 советов по монетизации игр — Часть 2 Gamedev, Длиннопост, Покупка, Монетизация

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

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

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

Благодаря аналитике разработчики выясняют через какое время 70-80% платящих игроков совершают свой первый платеж, и все остальные будут наслаждаться рекламой. А если вы перестанете совершать платежи в течении какого-то времени, то вам тоже начнут показывать рекламу, чтобы увеличивать общую выручку проекта.

46. Зачастую, монетизация будет интегрирована в “скрытом” виде - опытные разработчики знают, что предлагать совершение покупки напрямую не лучшая практика, поэтому готовьтесь к тому, что вы будете покупать золото или какую-то другую валюту или игровую сущность, которая со временем будет незаметно расходоваться. Тратить виртуальные ресурсы гораздо проще и через создание привычки их тратить разработчики могут пытаться навязать вам потребность к покупке.

47. Ведите себя непредсказуемо - возможно, вам может быть известен такой термин, как “воронка-продаж” из других областей его применения и если вы будете вести себя необычно, то вряд ли разработчики игр смогут построить нормальную воронку или собрать статистику по вашим действиям, если они используют такие приемы.

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

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

Думаю, что такую практику многие разработчики подчеркнули из игры Coin Master, которая на мой взгляд является “идеалом” для построения систем монетизации и экономики и если вы не хотите попадаться на другие уловки от разработчиков, то можете изучить ее устройство и подходы.

50. Изучайте, как работает монетизация и как устроены другие процессы разработки игр - то, что вы читаете этот материал уже хорошо и вы будете знать как не попасться на уловки разработчиков игр, но не стоит забывать и о других публикациях. Вот пример Must have механик монетизации для match 3 и если вы играете в подобные игры, то обратите внимание на то, к чему могут прибегать разработчики таких игр.

51. Следите за информацией в офферах - злобные разработчики могут использовать разные трюки, чтобы мотивировать вас на покупку: лейблы выгоды, скидки, зачеркнутые цены, подпись “осталось всего 10 штук”, красивые персонажи, заголовки и прочее… Все это сделано для того, чтобы повысить ваш интерес и внимание к офферам.

52. Игры монетизируются только на рекламе, внутриигровых покупках или на прямой продаже - как правило, один из типов монетизации из этого пункта составляет 80-90% доходов от всей выручки и разработчикам выгодно делать акцент только на чем-то одном. Но если вы видите в играх все вместе и сразу, да еще и в большом количестве, то стоит задуматься о том, комфортно ли вам играть или стоит поискать что-то лучше.

Если вы являетесь разработчиком, то грамотно проанализируйте главный источник дохода и если это будет реклама, то вряд ли будет хорошей идеей предлагать игрокам множество офферов. А если основа монетизации это in-app’ы, то лучше сократить показы рекламы, продумать их интеграцию более вдумчиво, чтобы не “заваливать” игрока и тем и другим… пусть лучше играет в то, что вы сделали.

53. Если вы часто заглядываете во внутриигровой магазин, то вас приучают это делать, чтобы вы совершали покупки - многим разработчикам прекрасно известно (или они видят это из данных статистики), что большинство покупок в игре приходится на внутриигровой магазин. А чтобы вы тратили больше, они используют следующее: предлагают вам покупать не только за хард, но и за софт валюту, чтобы создать у вас привычку… добавляют в банк бесплатные ежедневные награды и награды, которые дают за просмотр рекламы, чтобы вы заходили в туда еще чаще. Ну, а про красные лейблы “нотификаций”, которые всех раздражают, вам должно быть уже давно все известно.

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

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

55. Покупайте разное, чтобы разработчики не догадались, что вам предлагать - если вы будете совершать одни и те же покупки с игровыми сущностями или офферы по одинаковым ценам, то разработчики быстро поймут то, что вам интересно и будут предлагать именно это, а также, будут давать меньше скидок и других предложений, которые могли бы выгодны именно вам.

99 советов по монетизации игр — Часть 2 Gamedev, Длиннопост, Покупка, Монетизация

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

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

58. Остерегайтесь накопительных офферов - такие офферы являются самыми “излюбленными” у игроков, поэтому не покупайте их, чтобы сохранить свои деньги.

Узнать, что оффер накопительный достаточно просто - сущности и валюта и в нем накапливается со временем и с вашим прогрессом по игре или после его покупки вы будете получать больше наград, если будете играть больше. В пример можно привести свинью -копилку, сезонные пропуски и все виды офферов, которые имеют подпись “разблокируется позже”.

59. Разная логика продаж может быть повсюду - по сути, это небольшое повторение совета под номером 54, но относящееся уже не к внутриигровому магазину, а ко всей игре… Если вы видите множество разных офферов, которые не подкрепляются какой-то логикой, то задумайтесь о намерениях разработчиков… И этот совет нужен для разработчиков, чтобы призвать их задуматься о более грамотной логике построения игровой экономики…

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

Простой пример - у вас должны быть основные предложения и второстепенные, офферы для событий и праздников, а также, офферы с разной ценой и выгодой и если вы задумаетесь о создании нового типа оффера, то должны четко понимать, как он будет встроен в общую систему экономики в вашей игры. И если игра уже имеет один или два оффера с ценой за пару баксов и скидкой в 20%, то вряд ли будет хорошей идей добавлять что-то похожее.

60. Вам стоит понимать в какую игру вы играете - а разработчикам стоит четко понимать, какую игру они делают… Если речь идет о гипер-казуальных играх, то их придется “заполнить” рекламой, но не стоит ожидать, что игрокам это понравится, а если вы делаете игру с прямой продажей, то вряд ли игроки оценят наличие в ней офферов или рекламы.

Также, помимо типа и жанра создаваемых игр, разработчикам стоит понимать сроки окупаемости затрат на рекламу и разработку и если эти сроки будут не очень большими, то им стоит рассчитывать только на агрессивные подходы к монетизации, что опять же повлияет на отношение игроков к подобным играм. Если вы понимаете как должна работать монетизация в разных играх, то не стоит расстраиваться в том случае, если проект “полный” рекламы провалиться… просто вернитесь к совету под номером 35 из этого материала.

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

VIP привилегии, о которых я писал в совете 44 до сих пор остаются востребованными в таких играх и в офферах вам будут предлагать не только валюту, но и такие предметы, которые в действительности могут быть полезными и не утратят смысл со временем… это могут быть новые персонажи, предметы, элементы построек и все то, что невозможно потратить.

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

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

63. Остерегайтесь грандиозных распродаж - даже если разработчикам удалось “раскрутить” вас на покупку, то постарайтесь сохранить ваши игровые ресурсы, ведь обычно, после больших распродаж в игре могут появиться сложные события, которые рассчитаны на то, что вы будете тратить все новоприобретенные сущности. Будьте внимательны!

64. Посмотрите на игру на разных устройствах или аккаунтах - иногда, разработчики могут тестировать разные игровые механики или относить вас к таким типам игроков, которым будут давать меньше ресурсов или показывать больше офферов или рекламы. Иногда, каналы привлеченного трафика можно хорошо отследить и если вы придете из “достоверного” канала, то разработчики могут использовать трюки, о которых я писал в начале.

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

66. Сделайте платеж, чтобы понять намерения разработчиков - если после покупки вам начнут показывать более дорогие офферы и их количество увеличится, то вам будет четко известно о том, на что рассчитывают разработчики. А также, совершение покупки поможет понять вам и то, как может измениться сама игра, ведь ее создатели могут увеличить сложность, добавить пейволов и все для того, чтобы мотивировать вас платить еще больше.

67. Никогда не совершайте вторую покупку - даже если разработчикам удалось заставить вас совершить одну покупку, то не в коем случае не совершайте следующую… Дело в том, что 97% доходов мобильных игр происходит от повторных покупок и вот статья в подтверждение.

Дополнительно, обратите внимание, что 64% игроков склонны совершать повторные покупки. А 51% повторных покупок совершаются в тот же день и 25% в течение 7 дней после установки приложения. Поэтому, чтобы уберечь себя от лишних трат, просто начните играть через неделю, а лучше через несколько после установки и первого запуска игры, когда вы с ней ознакомились.

99 советов по монетизации игр — Часть 2 Gamedev, Длиннопост, Покупка, Монетизация

Вместо заключения

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

А чтобы не попасться на все уловки разработчиков, изучайте то, как они создают свои игры в моем Telegram канале или ищите другие статьи по теме в моем профиле. До скорого…

Показать полностью 5
[моё] Gamedev Длиннопост Покупка Монетизация
4
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии