Личный сайт Мустафина Ильгиза

PBDoom

Последнее обновление:

PBDoom — это порт видеоигры Doom (1993) для устройств PocketBook на электронной бумаге. Загрузки находятся на официальном сайте PBDoom.

PBDoom на 6 дюймовом экране
PBDoom на 6" экране

PBDoom основан на SDL Doom Сэма Лантинги. Функции SDL для отрисовки изображения на экране были заменены функциями из библиотеки inkview для PocketBook. Функции SDL для проигрывания звука были полностью удалены из кода на текущий момент (на многих устройствах PocketBook текущей линейки отсутвуют динамики, хотя всё ещё можно подключить наушники).

Разработка PBDoom началась в марте 2022. Первый публичный релиз был опубликовна в январе 2023.

Исходный код доступен на GitHub.

Зачем?

Этот проект преследует несколько целей:

  1. Предоставить пример игры в жанре экшен для устройств с экранами на электронных чернилах
  2. Создать ещё одно приложение для PocketBook
  3. Получить опыт работы с библиотекой inkview

Само портирование игры Doom не было большим проектом. SDL Doom уже и так работает на Linux, и (некоторые) устройства PocketBook работают на Linux. Было достаточно легко заменить запись пикселей в область памяти поверхности SDL на вызовы функции FillArea из библиотеки inkview.

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

Также этот проект познакомил меня с CMake.

Можно ли запустить Doom на PocketBook?

Да, можно. Но это не будет чем-то новым. Разработчики, работавшие над PocketBook, выпустили видео, где была показана игра Doom на PocketBook 360 Plus ещё в 2011 году.

Doom 2 на PocketBook 360 Plus

Эту версию разработчики сделали «коротая время за обедом» (оригинальное сообщение, архив), но, насколько я знаю, так и не выпустили её в общий доступ.

Таким образом, PBDoom может стать той самой публичной версией Doom для PocketBook, которой (кому-то) так не хватало.

Дизеринг изображений: оптимизация для электронной бумаги

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

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

Используя эту особенность, мы можем увеличить частоту обновления игры, теряя в качестве картинки.

Официальная документация inkview рекомендует уменьшать количество цветов до двух для быстрых обновлений (страница 12):

Вызывайте [DitherArea] с levels=2 и method=DITHER_THRESHOLD для получения изображения, которое может быть быстро отображено (меню, списки и выделения)

Перевод и форматирование от меня.

В библиотеке inkview есть несколько функций для дизеринга изображения на экране (DitherArea и другие).

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

История изменений записи

  • 28 февраля 2023 — добавлена основная часть текста