Могущество PDF — Как стал возможен запуск DOOM в формате док

По сети активно вирусится новый метод запуска легендарной игры из 90х про истребление демонов на Марсе — на этот раз внутри PDF-документа. Те, кто еще не видел, могут скачать PDF в моем телеграм-канале под этим постом.

Мне стало очень интересно разобраться в реализации, и к счастью автор проекта заботливо дал ссылки. Чтобы не отправлять вас читать разные сайты на английском, делюсь своим вольным переводом:

Мало кто знает, но компания Adobe при разработке технологии PDF для красивого отображения сложных структурированных документов добавила поддержку JavaScript. И не просто добавила поддержку языка, но и предоставила целый API для выполнения множества интересных функций, для примера: — Получения информации о мониторах; — Отправки HTTP-запросов; — Выполнение 3D-рендера.

Примечательно, что вся полнота функционала поддерживается только в фирменных программах просмотра PDF от Adobe (Acrobat Reader), а вот в реализации от корпорации Google (во всех браузерах на движке Chromium) доступен лишь ограниченный набор возможностей.

Тем не менее, возможностей оказалось достаточно для загрузки фреймворка asm.js — Это такой "предок" технологии WebAssembly, который позволял силами JavaScript худо-бедно переводить код с языка C на JavaScript.

Так как движок игры DOOM написан именно на языке СИ, то это означает, что портирование в данный формат вполне возможно. Но встает следующий вопрос — а как обеспечить отображение графики?

Благодаря уже упомянутому JS в PDF можно добавить поля для ввода (в том числе в виде галочек, уменьшенных до размера точки) и управлять их включением и отключением для имитации графики на экране. Вот только нативное разрешение DOOM: 320x200 пикселя, то есть суммарно нужно одновременно менять 64 тысячи значений для изменения картинки. Даже если заморочиться — внятной производительности получить невозможно.

Лайфхак от разработчика — применение псевдо-ASCII графики. Разбив диапазон между белым и черным цветом на 6 градаций серого в виде разных символов, и выводя изображение таким образом в строчном виде, ему удалось добиться приемлемой скорости 80 миллисекунд на отрисовку одного кадра (примерно 12 кадров в секунду) на его машине (на моем ноутбуке ощущение, что есть кадра 4 в секунду от силы).

Еще одной сложностью оказалось управление, но и эта трудность была преодолена обработкой введенных символов в поле ввода. Тем не менее, например, у меня в Яндекс Браузере не считывается Shift для движения вбок. Наверное, поэтому для тех, у кого еще что-то не заработает, была добавлена возможность управления через кнопки.

Несмотря на множество ограничений и допущений, реализация DOOM на PDF получилась очень интересной. Но, как мне кажется, обязательно найдется умелец, который доработает игру еще лучше.

Делитесь в комментариях своими впечатлениями от игры, пишите до какого момента осилили пройти, присылайте снимки экрана!

#doom #игры #игра #разбор #технологии #pdf #js #javascript #asmjs

Могущество PDF — Как стал возможен запуск DOOM в формате док | Сетка — социальная сеть от hh.ru