PBDoom — это порт видеоигры Doom (1993) для устройств PocketBook на электронной бумаге. Загрузки находятся на официальном сайте PBDoom.
PBDoom основан на
SDL Doom Сэма Лантинги. Функции SDL для отрисовки изображения на экране были заменены
функциями из библиотеки
inkview
для PocketBook. Функции SDL для проигрывания звука были
полностью удалены из кода на текущий момент (на многих
устройствах PocketBook текущей линейки отсутвуют динамики, хотя
всё ещё можно подключить наушники).
Разработка PBDoom началась в марте 2022. Первый публичный релиз был опубликовна в январе 2023.
Исходный код доступен на GitHub.
Зачем?
Этот проект преследует несколько целей:
- Предоставить пример игры в жанре экшен для устройств с экранами на электронных чернилах
- Создать ещё одно приложение для PocketBook
-
Получить опыт работы с библиотекой
inkview
Само портирование игры Doom не было большим проектом. SDL Doom
уже и так работает на Linux, и (некоторые) устройства PocketBook
работают на Linux. Было достаточно легко заменить запись
пикселей в область памяти поверхности SDL на вызовы функции
FillArea
из библиотеки
inkview
.
Однако, из-за ограничений технологии электронной бумаги (низкая скорость обновления экрана, отсутвие цвета на некоторых устройствах), приходится немного дорабатывать процедуру вывода видео. В этом проекте мы исследуем что нужно сделать и что возможно сделать для этого.
Также этот проект познакомил меня с CMake.
Можно ли запустить Doom на PocketBook?
Да, можно. Но это не будет чем-то новым. Разработчики, работавшие над PocketBook, выпустили видео, где была показана игра Doom на PocketBook 360 Plus ещё в 2011 году.
Эту версию разработчики сделали «коротая время за обедом» (оригинальное сообщение, архив), но, насколько я знаю, так и не выпустили её в общий доступ.
Таким образом, PBDoom может стать той самой публичной версией Doom для PocketBook, которой (кому-то) так не хватало.
Дизеринг изображений: оптимизация для электронной бумаги
Как было отмечено выше, электронная бумага имеет низкую частоту обновления. Поэтому нам нужны обходные пути для комфортной игры.
Некоторые дисплеи на электронной бумаге предоставляют несколько режимов обновления изображения. В некоторых режимах скорость обновления зависит от того, как именно изменяется изображение. Например, заменить чёрный регион на белый может быть быстрее, чем изменение региона с одного промежуточного оттенка серого на другой.
Используя эту особенность, мы можем увеличить частоту обновления игры, теряя в качестве картинки.
Официальная документация
inkview
рекомендует уменьшать количество цветов до двух для быстрых
обновлений (страница 12):
Вызывайте [
DitherArea
] сlevels=2
иmethod=DITHER_THRESHOLD
для получения изображения, которое может быть быстро отображено (меню, списки и выделения)
Перевод и форматирование от меня.
В библиотеке
inkview
есть несколько функций для дизеринга изображения на экране
(DitherArea
и другие).
Также мы можем поработать с цветом и изменить яркость, контраст и провести гамма-коррекцию изображения перед дизерингом, чтобы оптимизировать итоговую картинку.
История изменений записи
- 28 февраля 2023 — добавлена основная часть текста