Архив рубрики: Dev

Категория, содержащая различные информационные заметки или посты об интересных проектах.

Портирование Spout на Android OS: первый опыт работы с NDK, JNI и OpenGL ES

Когда-то давно я портировал на платформу MotoMAGX простенькую, но сильно затягивающую игру Spout. Цель этой игрушки весьма проста: необходимо подниматься на кораблике всё выше и выше по экрану, набирая очки и сражаясь с гравитацией. Кораблик управляется с помощью реактивной струи, частички которой могут служить не только средством передвижения, но и грозным оружием. Реактивной струёй можно разрушать стены и препятствия, преграждающие путь наверх. Если управляемый вами кораблик столкнётся с преградой или упадёт в самый низ экрана, то вы проиграете. С увеличением набираемой высоты плотность расположения препятствий постепенно увеличивается, что сильно влияет на игровую сложность. Пространство, по которому поднимается кораблик, разделено на равные части, границы которых отмечены горизонтальной полоской чёрного цвета, которую, кстати, тоже нужно разрушать. На преодоление первой части пространства вам даётся ровно одна минута, а после того, как вы пересечёте чёрную черточку, к оставшемуся времени снова добавится 60 секунд. Таким образом, быстро пролетая первые части пространства, вы сможете сохранить драгоценное время для более сложных участков выше. Звучит очень просто, но на практике постоянная борьба с гравитацией и набираемой скоростью — весьма сложное испытание.



Порт игры Spout, запущенный на Android-устройстве Motorola Photon Q.

Игра настолько сильно захватила меня простотой своего исполнения и в то же время достаточной сложностью, что я решил портировать Spout и на современные устройства под управлением Android OS. В первоначальном варианте движок Spout, портированный на MotoMAGX, работал через библиотеку SDL. Благодаря этому игра могла запуститься на всей линейке MotoMAGX-устройств, для которых была портирована библиотека SDL. В случае с портированием игры на Android OS, я решил использовать только библиотеки и средства, доступные в стандартной поставке, поэтому зависимость от SDL отпала за ненадобностью. Было решено не переписывать движок Spout с языка программирования C на Java, а воспользоваться Android NDK и стандартным механизмом JNI (Java Native Interface) для взаимодействия между Java-прослойкой и нативным кодом на языке C. В качестве библиотеки для отображения игрового контекста на экране, был взят OpenGL ES; эта библиотека доступна практически в каждом Android-устройстве, которое имеет возможность аппаратного ускорения графики посредством GPU. Таких устройств большинство, Android-девайсы, которые могут обходиться только программным рендерингом, давно уже исчезли с витрин салонов сотовой связи. Игровой контекст будет рендериться на текстуру, которую я и буду выводить на экран устройства. К моему огромному сожалению, обладателей Android-устройств с эргономичной физической клавиатурой остались единицы, поэтому для удобного управления корабликом в Spout мной было реализовано простейшее сенсорное управление.

Читать далее Портирование Spout на Android OS: первый опыт работы с NDK, JNI и OpenGL ES

Android, Dev

Написание простейших ботов для Telegram на JavaScript и Python

Как всем уже давно известно, в популярном клиенте для обмена мгновенными сообщениями Telegram появилась возможность создавать специальных ботов, которые могут оказаться весьма полезными, будучи добавленными в групповые чаты. Боты могут показывать участникам конференции различную полезную информацию, будь то последние новости какого-либо интересного сайта, погоду или курс валют. Функциональность программ для ботов практически не ограничена, например, можно реализовать бота, который будет отправлять в приватный или групповой чат фотографию с подключенной к компьютеру Web-камеры или мониторить температуру процессора на сервере. К примеру, запустив программу бота на домашнем компьютере, можно будет следить за какими-нибудь его показателями удалённо, просто отправляя команды боту с любого устройства, на котором установлен клиент Telegram. Однако, существует несколько ограничений, которые реализованы на уровне Telegram Bot API:

  • Во-первых, бот не может написать первым, он должен обязательно отозваться на команду пользователя;
  • Во-вторых, боты не могут отвечать на сообщения друг-друга.

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



Дайджест-бот, отдающий накопленные сообщения за день в процессе работы. Скриншот из Desktop’ного клиента Telegram.

Для сообщества любителей мобильных гаджетов от Motorola — MotoFan.Ru существует весьма активная конференция в Telegram, участником которой я также являюсь. Мной было замечено, что для того, чтобы отметить значимое событие, произошедшее в течении дня, или какую-нибудь важную информацию, пользователи часто прибегают к использованию тега #digest. Подобным тегом отмечаются сообщения, которые по мнению участников конференции необходимо добавить в сводку текущий событий. При этом посетители группового чата, которые появляются в конференции достаточно редко, могут не читать огромное количество оставленных ранее сообщений, а выделить с помощью тега #digest только основную информацию. Но для этого им нужно воспользоваться поиском тега по сообщениям и попрыгать по листингу чата, что достаточно неудобно. Поэтому возникла идея создания дайджест-бота, который будет накапливать и сохранять все сообщения участников конференции, отмеченные тегом #digest за какой-либо срок, например, за неделю, а потом выдавать их скопом по команде /digest в чат. Это весьма удобно, в отличие от ручного поиска необходимых сообщений.

Читать далее Написание простейших ботов для Telegram на JavaScript и Python

Dev, Manuals, Others

Cave Story (Doukutsu Monogatari) via NXEngine для различных платформ

Cave Story (или в оригинале — Dōkutsu Monogatari), является одной из самых известных бесплатных японских Indie-игр. Весь игровой контент, включая музыкальные композиции и код, был создан лишь одним человеком — Daisuke «Pixel» Amaya. Pixel в течении пяти лет трудился над своей игрой, уделяя ей как можно больше свободного времени. Именно благодаря знакомству с Cave Story многие начинающие Game Developer’ы вдохновились на создание собственных Indie-проектов. После своего первого релиза для PC, который состоялся в 2004 году, игра медленно завоёвывала популярность геймеров в японском интернете, а после её перевода на английский язык — стремительным темпом распространилась по всему миру. В целом, Cave Story получила достаточно положительные отзывы критиков за свой увлекательный геймплей и интересный сюжет. Несколько лет спустя, в ноябре 2011-го года, в сервисе цифровой дистрибуции Steam вышло переиздание игры, названное Cave Story+, содержащее незначительные отличия от оригинальной версии.



Скриншоты из русской версии Cave Story, запущенной с помощью NXEngine на устройстве Ritmix RZX-50; локации «Хранилище Яиц» и «Грасстаун»

Cave Story представляет собой 2D-платформер с элементами RPG, выполненный в антураже старых классических игр, в частности, разработчик вдохновлялся таким проектом, как Metroid. После проявления интереса к игре со стороны публики Cave Story была портирована на наиболее популярные платформы. Поскольку исходный код игры закрыт, Cave Story удалось перенести лишь на ограниченное количество игровых устройств. К счастью, нашлась энтузиастка, которая полностью переписала движок игры на C++ (изначально он был написан на C) и выпустила код под лицензией GNU GPL Version 3. Свой проект Caitlin «rogueeve» Shaw назвала NXEngine. Благодаря этому движку, практически полностью совместимому с оригинальным, в Cave Story можно поиграть на самых разных платформах и устройствах.

Но, к сожалению, не всё так гладко и NXEngine всё ещё нуждается в «доработке напильником». Например, на Dingoo A320 невозможно играть со включенной музыкой из-за возникающих «подтормаживаний» в игре. Caitlin Shaw хотела полностью сохранить совместимость с оригинальными DATA-файлами Cave Story, поэтому музыка в нём генерируется процедурно, создавая большую нагрузку на CPU. Центральный процессор Dingoo A320 не справляется с такой нагрузкой, отсюда и возникают «подтормаживания», сильно мешающие игровому процессу. Одна из моих модификаций исходного кода NXEngine позволяет использовать библиотеку SDL_mixer, добавляя в игру возможность воспроизведения трекерной музыкой из внешних файлов, вместо ресурсоёмкой процедуры генерации. Кроме того, NXEngine не мог отобразить русские буквы из русифицированных DATA-файлов, но с моим небольшим исправлением это стало возможным. Теперь геймеры, не слишком хорошо знающие английский язык, смогут всецело насладиться сюжетными диалогами. Помимо этого, в движок была добавлена возможность работы с широкоформатными дисплеями с разрешением 480×272, что позволило запускать Cave Story на Ritmix RZX-50 в полноэкранном режиме. Для удобства внесения изменений в NXEngine была произведена некоторая адаптация исходного кода к интегрированной среде разработки — Qt Creator.

Читать далее Cave Story (Doukutsu Monogatari) via NXEngine для различных платформ

Dev, Dingux, EZX, MotoMAGX

Установка MinGW/MSYS и настройка окружения для разработчика

Наверное, многие разработчики сталкивались с проблемой выбора или создания окружения для программирования. На мой взгляд, бесплатное окружение на основе порта компилятора gcc (MinGW) и какая-нибудь IDE, совместимая с ним — наиболее приемлемый выбор.
В этой статье я рассмотрю установку компилятора, его интеграцию с интегрированной средой разработки, его настройку, установку и компиляцию сторонних библиотек. Рассмотрю некоторые полезные утилиты для облегчения сборки исходного кода и системы контроля версий файлов.
Статья со временем будет обновляться и дополняться.


MinGW/MSYS и QtCreator

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

Читать далее Установка MinGW/MSYS и настройка окружения для разработчика

Dev, Manuals, Others

Slitherlink — русификация и портирование игры на Ritmix RZX-50

Slitherlink или Китайская стена — это логическая головоломка, созданная японской компанией Nikoli. Кстати, эта компания получила известность благодаря Sudoku.



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

Читать далее Slitherlink — русификация и портирование игры на Ritmix RZX-50

Dev, Dingux

Игра Color Lines для Ritmix RZX-50

Игра для Ritmix RZX-50, порт под экран 480×272, выполненный мной. Автор игры — разработчик nzeemin.



Правила игры:
Игровое поле представляет собой сетку 9×9 клеток. За один ход компьютер выставляет в случайных клетках три шарика случайного цвета. Игрок, в свою очередь, должен составлять цепочки из пяти и более шариков. Цепочки считаются по вертикали, горизонтали и диагонали. Передвигать можно только один шарик и то, только если между новым и старым местом есть проход. Таковы базовые правила игры.

Читать далее Игра Color Lines для Ritmix RZX-50

Dev, Dingux

Попытка портирования kLib на Motorola ZN5

Попробовал собрать интерфейсную библиотеку kLib из kInterface от -=Strelok=- для Motorola ZN5. Результаты оказались положительными, но, к сожалению, многое пока не работает.



А что работает — немного лагает. Но скриншотом полюбоваться уже можно.

Dev, MotoMAGX, Others

Открыт исходный код kInterface!

Недавно программист Влад Колертс, известный ещё под ником -=Strelok=-, открыл исходный код kInterface и ещё некоторых приложений-сателлитов:

  • kRepoz — Клиент для онлайн-репозиториев, когда-то я портировал его на Motorola ZN5;
  • rokrArc — Архиватор;
  • TReader — Читалка текстов;
  • PicView — Просмотрщик изображений;
  • kLib — Библиотека элементов интерфейса.



Напоминаю, что kInterface — это кастомный интерфейс для Motorola ROKR E2, обладающий весьма интересными возможностями, красивой анимацией и оформлением. Теперь, когда его исходники открыты, возможны порты этого интерфейса на такие девайсы, как Motorola ZN5, Z6, E8, EM30 и другие.

Читать далее Открыт исходный код kInterface!

Dev, EZX, MotoMAGX

Разгоняем Motorola ZN5: CPU Overclocking! @ 798/665 MHz

На днях поковырялся в ядре Linux от своего старого Motorola ZN5 и немного повысил частоту работы процессора. В целом, производительность устройства заметно увеличилась. Это можно судить по тестам из бенчмарка GPMark:



Слева направо: 532 MHz, 665 MHz и 798 MHz.

После поднятия частоты аппарат начал быстрее работать в некоторых меню, но, к сожалению, разгон процессора конечно же не помог полностью избавиться от глюков и подвисаний нашей Qt-оболочки. Телефон нормально запускается и работает на 798 MHz у меня уже примерно две недели. 798 MHz лишь заменяет 532 MHz при нагрузке, поэтому все утилиты типа zCpu, aiCPU и другие должны работать.

Читать далее Разгоняем Motorola ZN5: CPU Overclocking! @ 798/665 MHz

Dev, Manuals, MotoMAGX

Карточная игра Durak для Ritmix RZX-50

На выходных портировал карточную игру Durak на Ritmix RZX-50.



Вывод изображения и координаты были переделаны под широкоформатный экран игровой консоли — 480×272. Добавлены звуки переключения карт. Автор игры — мой друг, использующий никнейм baat.

Читать далее Карточная игра Durak для Ritmix RZX-50

Dev, Dingux