Портирование Ken’s Labyrinth на Android OS с помощью библиотеки SDL 2.0

Игра Ken’s Labyrinth была разработана Ken’ом Silverman’ом и выпущена компанией Epic MegaGames в далёком 1993 году. Ken Silverman в первую очередь известен как американский программист, создавший игровой движок Build Engine для компании 3D Realms, на нём впоследствии будут выпущены такие известные игры, как Duke Nukem 3D, Blood и Shadow Warrior. Движок, используемый в Ken’s Labyrinth, является неким прародителем Build Engine, в техническом плане он сопоставим с движком Wolfenstein 3D от id Software, но имеет несколько интересных преимуществ, например, интерактивные спрайты и текстуры, благодаря которым в игре реализованы карты уровней и специальные игровые автоматы, известные как слот-машины «однорукий бандит». Спустя несколько лет после выхода игры, когда её продажи практически прекратились, Ken Silverman выложил наиболее полный дистрибутив Ken’s Labyrinth на свой сайт и игра стала доступна для свободной загрузки. Немного позднее был опубликован и её исходный код.

После открытия исходного кода Jan Lönnberg портировал игру на современные операционные системы, используя библиотеку OpenGL для вывода графики, библиотеку SDL для обработки событий ввода, а также для вывода звука и эмулятор AdLib, написанный тоже Ken’ом Silverman’ом, для воспроизведения игровой музыки. Так родился проект LAB3D/SDL, предоставляющий возможность запустить Ken’s Labyrinth на любых операционных системах, на которых доступны библиотеки OpenGL и SDL. Позже Jared Stafford, использующий никнейм jspenguin, внёс некоторые улучшения в проект LAB3D/SDL, добавив способ загрузки PNG-текстур высокого разрешения, метод рендеринга теней и световых бликов в корректной перспективе, правильную скорость анимации и множество других исправлений. В 2010 году разработчик Scott Smith, использующий никнейм Pickle, переписал рендеринг LAB3D/SDL с OpenGL на OpenGL ES, что позволило запускать Ken’s Labyrinth на различных портативных игровых устройствах, таких как GP2X Caanoo или Pandora.



Порт игры Ken’s Labyrinth, запущенный на Android-устройстве Motorola Droid 4.

Впервые в Ken’s Labyrinth я поиграл в 2010 году на портативной консоли GP2X Caanoo, имеющейся у моего друга. Меня сильно привлекают подобные старые игры, поэтому я решил портировать Ken’s Labyrinth и на своё мобильное устройство: Motorola ZN5 на платформе MotoMAGX. Увы, но этот смартфон не имел графического 3D-ускорителя с поддержкой OpenGL ES, а потому портирование без переписывания значительной части движка, отвечающей за вывод графики, было бы весьма затруднительным. Время шло, у меня появлялись новые интересные гаджеты на Android OS и вот, спустя пять лет, я вспомнил про ту неудачную попытку портирования игры и решил её повторить, но уже для современных смартфонов, которых у меня на момент написания статьи несколько: Motorola Droid 4 и Motorola Photon Q. Эти устройства на Android OS имеют на борту графические 3D-ускорители, обладающие достаточной производительностью и функциональностью для подобного рода игр.

За основу будущего проекта я решил взять исходные коды порта LAB3D/SDL, модифицированные jspenguin’ом и применить к ним патчи для поддержки OpenGL ES от Pickle: таким образом задействуются возможности OpenGL ES версии 1.0, что благоприятно отразится на списке поддерживаемых Android-устройств. Как и в оригинале, на компьютере LAB3D/SDL при своём первом запуске отображает специальный конфигуратор, где можно настроить различные опции и параметры, а после выхода из него и по повторному запуску исполнительного файла уже запускается сама игра. Я бы хотел сохранить подобное поведение приложения и в Android-версии порта.

Читать далее Портирование Ken’s Labyrinth на Android OS с помощью библиотеки SDL 2.0

Android, Dev

Опыт покупки Motorola E398 в новом оригинальном корпусе на ebay.com

Несмотря на то, что с момента выхода на мобильный рынок телефона Motorola E398 прошло целых 12 лет, этот гаджет пользуется спросом и по сей день. Ностальгия и воспоминания о беззаботной юности — одни из самых сильных чувств и сегодняшняя молодёжь, натерпевшись современных девайсов с огромными сенсорными экранами, нередко вспоминает о тех устройствах, которыми они или их друзья когда-то пользовались в школах и университетах. Им приходит в голову мысль купить подобное устройство, чтобы пользоваться им как вторым телефоном, либо просто поставить на полку. Часто объектом такого вожделения становятся «народные» телефоны, имевшие в былые времена огромную популярность в странах СНГ. К ним можно отнести такие модели, как Nokia 3310, Nokia 6230i, Samsung X100, Siemens A60/C60, Motorola C350, Motorola RAZR V3, Sony Ericsson K750i и, конечно же, Motorola E398. В своё время о громком звуке из динамиков E398 ходило множество легенд, а благодаря тому, что этот телефон был практически у каждого второго меломана, энтузиастами для него было выпущено огромное количество всевозможных кастомных прошивок, патчей и эльфов.



Телефон Motorola E398 и оригинальная коробка.

К сожалению, купить сейчас E398 в хорошем состоянии с рук очень сложно, так как корпус, блок цифровой клавиатуры и джойстик полностью теряют товарный вид за год-другой активного использования. В основном проблемы возникают из-за покрытия Soft-touch, благодаря которому телефон приятно держать в руке, но со временем покрытие начинает стираться и облазить. Такие телефоны массово скупают в Китае, вынимают из них все внутренности, одевают в новые неоригинальные корпуса и продают под видом новых. Но правильнее было бы назвать их Refurbished или «восстановленные». Именно такими аппаратами забиты сейчас все сайты продающие якобы «новые» E398. Часто покупка подобного китайского гаджета портит всё настроение — устройство приходит в скрипящем корпусе, с кривой локализацией клавиатуры и с перевёрнутой клавишей меню. Панельки царапаются и разваливаются буквально за месяц использования и телефон после этого забрасывается на дальнюю полку, а потраченные на него денежные средства становится жаль. Именно поэтому я советую людям не торопиться с покупкой восстановленного аппарата по объявлению в первом попавшемся интернет-магазине, а рассмотреть различные варианты. Например, иногда попадаются телефоны которыми пользовались весьма аккуратно и которые ещё сохранили свой товарный вид. Оригинальный корпус всегда лучше дешёвого китайского барахла, сделанного на коленке. Очень редко на различных аукционах попадаются практически новые Motorola E398, как нереализованные остатки со складов салонов сотовой связи, именно о таком случае я и хочу поведать.

Читать далее Опыт покупки Motorola E398 в новом оригинальном корпусе на ebay.com

Manuals, Others, Reviews

Fruit’Y — Playing with edibles для MotoMAGX

Создание игры «Fruit’Y — Playing with edibles» было сильно вдохновлено классической серией игр Gem’X от Kaiko. Эти игры выходили на таких платформах, как Commodore Amiga 500, Commodore 64 и Atari ST. Fruit’Y впервые была продемонстрирована на мероприятии Revision 2015 demoparty, где участвовала в конкурсе и заняла пятое место в номинации Other Competitions/Game. Осенью 2015 года по просьбе Kojote из RetroGuru я портировал эту игру и на платформу MotoMAGX.



Хотя строгая мама запрещает тигрёнку Sheran’у играть с едой и лакомствами, невозможно удержать маленького хищника от его любимого развлечения. Sheran находит в глубоких джунглях блестящие, замечательно пахнущие свежие фрукты и не может оставаться в стороне: обязательно их попробует. Давайте поддержим тигрёнка и поможем ему насладиться вкусными дарами джунглей.

Читать далее Fruit’Y — Playing with edibles для MotoMAGX

MotoMAGX

Экскурс в прошлое: портирование графической оболочки OPIE на Ritmix RZX-50

Эта статья достаточно долго провалялась у меня в черновиках и так и осталась незаконченной. И вот, спустя три года, я обнаружил её, разгребая залежи своих BackUp’ов. Простенький интерфейс старого доброго OPIE на скриншотах так меня обрадовал и навеял столько хороших воспоминаний, что я незамедлительно решил довести статью до ума и опубликовать её в блоге. К сожалению, я уже давно не являюсь владельцем портативной игровой приставки Ritmix RZX-50, но возможно ещё остались счастливые обладатели этого устройства, которым будет интересна нижеизложенная информация.

Расшифровывается аббревиатура OPIE как Open Palmtop Integrated Environment — это графический интерфейс с открытым исходным кодом, предназначенный для работы на карманных компьютерах или любых других устройствах, работающих на ядре Linux. В основном он использовался на коммуникаторах и PDA, произведенных фирмой Palm, а также на устройствах Sharp Zaurus. На самом деле OPIE является форком Qtopia — окружения для встраиваемых систем, которое когда-то разрабатывала ныне почившая компания Trolltech. OPIE изначально задумывался как графическое окружение для дистрибутива операционной системы GNU/Linux под названием Familiar. Familiar, в свою очередь, предназначался для работы на различных карманных компьютерах и предлагал на выбор два графических окружения — GPE и, соответственно, OPIE. Благодаря тому, что OPIE работает в режиме Framebuffer’а и не использует в своей работе оконную систему X Window System, на слабых устройствах удается сэкономить немного памяти и повысить отзывчивость интерфейса. Помимо этого преимуществом OPIE является бинарная совместимость с Qtopia. OPIE может быть установлен в самые различные карманные компьютеры или даже на мобильные телефоны, например, он мог запускаться параллельно EZX-окружению в смартфонах Motorola E2/E6/A1200/E680i или являться полноценной оболочкой в Siemens SX1.



Внешний вид интерфейса OPIE: Одна из вкладок Launcher’а и приложение opie-console, являющееся эмулятором терминала.

Последняя версия OPIE — 1.2.5, она датирована концом 2010 года. Увы, проект давным-давно не развивается и считается практически мёртвым. Функциональность этого графического окружения застряла где-то в 2005-2006 годах, и чтобы допилить его до юзабельного состояния на конкретном устройстве, нужно потратить очень много собственных сил и времени. Но запуск OPIE на таком гаджете, как Ritmix RZX-50, как говорится, just for fun, может быть интересным занятием на несколько вечеров. Ведь эта графическая оболочка своего рода одна из ветвей истории развития интерфейсов для мобильных устройств и встраиваемых систем.

Читать далее Экскурс в прошлое: портирование графической оболочки OPIE на Ritmix RZX-50

Dev, Dingux

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