Все записи автора EXL

Xump — The Final Run для MotoMAGX

Игра «Xump — The Final Run» является простой мультиплатформенной головоломкой от команды RetroGuru, которую я портировал на устройства, работающие на платформе MotoMAGX. Первоначально игра была продемонстрирована на мероприятии Psilocybin Development в далёком 2005 году. Позже Xump подвергся тотальной переработке, был улучшен практически каждый аспект игры: новая графика, новые уровни, новая музыка, новые возможности, всё новое…



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

Читать далее Xump — The Final Run для MotoMAGX

MotoMAGX

Портирование 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

Sqrxz 4 — Cold Cash для MotoMAGX

Почему-то я давно не писал о портировании old-school игрушек от команды RetroGuru на платформу MotoMAGX. Восполняю упущенное, хотя уже давно не являюсь владельцем устройства на этой интересной платформе. В принципе, после того как мои патчи «вошли в апстрим», всё портирование сводится к обычной сборке исполнительного файла из исходников (+/- несколько несущественных исправлений) и к созданию установочного MGX-пакета. Игра использует кросс-платформенную библиотеку SDL для вывода графики и библиотеку libmodplug вкупе с SDL_mixer для проигрывания классной внутриигровой трекерной музыки. Sqrxz 4 — Cold Cash был явлен миру на мероприятии Revision 2014 demoparty (на Пасху 2014 года) для 13 платформ: MS Windows (32-Bit), Linux (32-Bit, 64-Bit), Wiz, PSP, MotoMAGX, Dreamcast, GCW Zero, Mac OS X (32-Bit, 64-Bit) / Intel, Amiga OS4, MorphOS, Symbian OS Series 60, Symbian OS UIQ3, Raspberry Pi, Caanoo, GP2X и OpenPandora. Игре удалось заполучить пятое место на этом конкурсе в номинации Other Competitions/Game.



Многие поклонники хардкорных видеоигр в жанре Jump’n’Think потребовали продолжение и RetroGuru Team выполнили их требование. Четвёртая часть франшизы про храброго кролика Sqrxz называется Cold Cash и переносит вас на холодный ледяной остров. Чтобы вернуться домой вам предстоит собрать все блестящие шарики изо льда на уровне и обхитрить различных неприятелей: злых пингвинов, тревожных подводных существ, призраков и других опасных врагов.

Читать далее Sqrxz 4 — Cold Cash для MotoMAGX

MotoMAGX

Написание простейших ботов для 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

Рендеринг и сглаживание шрифтов в GNU/Linux, как в MS Windows 7

Мне очень нравится Microsoft’овский моноширинный шрифт Consolas, разработанный Luc(as)’ом de Groot’ом специально для технологии сглаживания ClearType. На мой взгляд, основное из преимуществ этого шрифта — это перечеркнутый нуль, сильно отличающийся от буквы «O». Ну и полная поддержка кириллицы, разумеется. Однако в некоторых дистрибутивах GNU/Linux с отображением текста с помощью этого и некоторых других шрифтов не всё так гладко, в прямом и переносном смыслах.


Шрифт Consolas, изображение взято с en.wikipedia.org
Шрифт Consolas, изображение взято с en.wikipedia.org

Перенесенные из MS Windows «*.ttf»-файлы шрифта никак не хотели отображаться у меня в Linux Mint 15 KDE, так же, как и в Windows 7. Субпиксельное сглаживание, применявшееся в этом дистрибутиве, постоянно «размазывало» текст, отображаемый этим шрифтом, делая его невероятно отвратным. Иногда было невозможно отличить жирный текст от нормального.

К счастью, немного погуглив в интернете, я наткнулся на замечательный проект infinality, энтузиасты из которого разрабатывают патчи для библиотеки freetype. Благодаря этому проекту можно не только улучшить качество рендеринга шрифтов, но и тонко настроить способ субпиксельного сглаживания: имеется несколько предустановленных схем, которые имитируют популярные технологии рендеринга текста в различных операционных системах.

Читать далее Рендеринг и сглаживание шрифтов в GNU/Linux, как в MS Windows 7

Manuals, Others

Учим Cool Reader использовать системные шрифты из MS Windows

Я очень люблю читать электронные книжки различных форматов на своем ноутбуке. К сожалению, удобных программ для чтения электронных книг формата *.fb2, не так уж и много. Из наиболее известных можно отметить FBReader и Cool Reader; обе программы разработаны отечественными программистами. FBReader является де-факто стандартной читалкой, используемой в дистрибутивах GNU/Linux, а Cool Reader, на мой взгляд, больше подходит для MS Windows.



Интерфейс программ для чтения электронных книг. FBReader и Cool Reader в операционной системе MS Windows 8.1 (кликабельно)

У FBReader’а в Windows, по моему мнению, просто ужасный интерфейс; зато имеется возможность использовать любой системный шрифт. Версия Cool Reader’а для Windows может быть собрана с использованием различных фреймворков графических интерфейсов: кроме нативного Win32 API тут имеется Qt и WxWidgets. Кросс-платформенная Qt-версия Cool Reader’а выглядит весьма лаконично, но, увы, отсутствует возможность использовать какой-либо другой системный или пользовательский шрифт, кроме тех, что отмечены автором, как наиболее подходящие. Честно говоря, возможность использовать кастомный шрифт в Cool Reader имеется: для этого необходимо в корневой директории с программой создать папку «Fonts/» и положить туда любимые *.ttf-шрифты. Но ведь весьма велика вероятность, что любимый шрифт уже давно установлен в систему, а *.ttf-файл удален. Я считаю, что возможность использования любого установленного в систему шрифта — это наиболее правильное решение.

Читать далее Учим Cool Reader использовать системные шрифты из MS Windows

Manuals, Others

Компиляция Mozilla Firefox, Mozilla Thunderbird и Instantbird в дистрибутивах GNU/Linux

К сожалению, в репозиториях различных дистрибутивов GNU/Linux содержатся не совсем свежие версии популярных программ. Эта статья поможет вам скомпилировать из исходного кода последние релизы таких программных продуктов, как:



Логотипы Mozilla Firefox, Mozilla Thunderbird и Instantbird (слева направо)

Затем установить их и использовать в своей системе. Все эти приложения объединяет то, что они используют движок Gecko, а их интерфейс построен с использованием кросс-платформенного языка разметки XUL. Firefox и Thunderbird разрабатываются компанией Mozilla Corporation, а Instantbird является некоммерческим проектом, основанным несколькими французскими энтузиастами. Помимо XULRunner, который позволяет использовать для построения интерфейса язык разметки XUL, Instantbird использует libpurpule из проекта Pidgin. Библотека libpurpule позволяет мессенджеру работать со всеми популярными на данный момент протоколами и службами обмена мгновенными сообщениями.

Читать далее Компиляция Mozilla Firefox, Mozilla Thunderbird и Instantbird в дистрибутивах GNU/Linux

Manuals, Others

IDE для MotoMAGX/Dingux?! Легко! Подрубаем Toolchain’s & SDK’s к Qt Creator’у! И не только!

Наверное, каждый кто пытался написать что-нибудь интересное для телефонов Motorola на платформе MotoMAGX или для различных портативных игровых консолей, к примеру, Dingoo A320 или Ritmix RZX-50 на платформе Dingux, сталкивался с жесткой необходимостью использования какой-либо удобной среды разработки. Голая консоль и режимный редактор — это конечно круто и хардкорно, но иногда так хочется использовать полноценную рабочую среду с ее огромными возможностями, а не нагружать свой мозг различными командами консольных текстовых редакторов, которые так неудобны многим разработчикам. Хотя некоторые, особо бородатые спецы, вытворяют с ними такие вещи, что все удобство интегрированных средств разработки невольно меркнет на фоне скорости набора и редактирования текста этими профессионалами в таких вот экзотических программах.



Qt Creator, запущенный в одном из дистрибутивов GNU/Linux (кликабельно)

Поскольку Toolchain’s & SDK’s для платформ MotoMAGX и Dingux можно использовать только в дистрибутивах GNU/Linux, разработчики приложений для этой платформы весьма ограничены в выборе полноценных IDE. Скорее всего им приходится работать либо в KDevelop, либо в Code::Blocks. Но большинство разработчиков вообще не знают о существовании достойных интегрированных сред разработки под GNU/Linux, и предпочитают писать код прямо в любимом текстовом редакторе. Кто-то пишет в Kate, а кто-то в gedit или его форках, ну а некоторые даже осиливают для такого дела vim, а то и emacs!

Но сейчас, к счастью, речь пойдет о весьма зрелой и проверенной на прочность кроссплатформенной IDE, имя которой — Qt Creator.

Читать далее IDE для MotoMAGX/Dingux?! Легко! Подрубаем Toolchain’s & SDK’s к Qt Creator’у! И не только!

Dingux, Manuals, MotoMAGX, Others

Настройка Git’а и работа с удаленными репозиториями в Qt Creator под Windows 7

Недавно я столкнулся с небольшой проблемой настройки Git‘а для моей любимой IDE под Windows 7. Git никак не хотел работать с Qt Creator’ом нормально, все время «зависал» сам и «вешал» мне среду разработки. Информации по его настройке для этой IDE в интернете оказалось катастрофически мало. Настолько мало, что у меня даже возникло ощущение того, что будто бы я один столкнулся с этими проблемами и непонятками.

Решение всех этих странных проблем в работе Git’a с Qt Creator’ом оказалось достаточно простым и банальным. Камнем преткновения всех «глюков» являлось подтверждение действий пользователя на каждый его «чих», будь то «Pull» или «Push». Все эти команды требовали авторизации по SSH/HTTPS, которую ну никак не хотел отображать в своей консоли Qt Creator, постоянно «зависая» на 60 секунд при выполнении команд, которые требовали ввода каких-либо данных в консоль.



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

Читать далее Настройка Git’а и работа с удаленными репозиториями в Qt Creator под Windows 7

Manuals, Others