Ещё одна необычная версия Doom появилась на GitHub — и новый проект DoomPaint выделяется сразу по нескольким причинам. Его разработал Марк Руссинович, технический директор Microsoft Azure. Проект запускает подлинную shareware-версию Doom, а MS Paint используется в качестве монитора — окна, в которое выводится изображение игры. Приём с буфером обмена OLE, лежащий в основе DoomPaint, позволяет игре работать с приличной скоростью — до 35 кадров в секунду, хотя иногда, по признанию самого разработчика, частота проседает до уровня «электронных таблиц».

реклама кормит Уточку 🦆

Как это устроено

«Настоящий движок Doom — ViZDoom, платформа, изначально созданная для исследований в области машинного обучения и игровых ботов на основе ZDoom, — запускает подлинный shareware-файл DOOM1.WAD, а недостающие эпизоды дополняются ресурсами Freedoom под лицензией BSD. Игра рендерится без вывода на экран», — объясняет Руссинович на странице проекта на GitHub. «Каждый кадр помещается в буфер обмена Windows и вставляется в холст Paint как настоящая правка документа». По словам разработчика, невысокая частота кадров «является частью очарования» DoomPaint, но 35 кадров в секунду — совсем неплохой результат, особенно по меркам компьютеров девяностых годов.

Источник изображения — tomshardware.comИсточник изображения — tomshardware.com

Чтобы кадры доходили до Paint без сбоев, автору пришлось решить не самую тривиальную задачу: ранние версии программы постоянно перезаписывали буфер обмена, из-за чего Paint иногда не успевал прочитать данные до появления следующего кадра. В итоге DoomPaint публикует единый OLE-объект и лишь обновляет содержащиеся в нём байты изображения, а момент готовности к следующему кадру определяется по тому, когда Paint прочитал предыдущий.

реклама кормит Уточку 🦆

Разрешение, звук и параметры запуска

На GitHub выложены файлы, ресурсы и подробная инструкция по запуску DoomPaint. В зависимости от возможностей компьютера игру можно запустить на полных 35 кадрах в секунду при разрешении 320×200 — именно в этом разрешении работал оригинальный Doom — либо при более крупном 640×400, которое даётся движку тяжелее. Есть звук и музыка: эффекты воспроизводятся через OpenAL, а музыкальные композиции конвертируются «на лету» из формата MUS в MIDI и отправляются на встроенный секвенсор Windows.

Проект поддерживает и другие параметры запуска, среди которых:

  • --res — выбор разрешения: 320×200, 320×240, 640×400 или 640×480;
  • --map — выбор конкретного уровня, например E1M2;
  • --wad — переключение между исходными эпизодами и ресурсами Freedoom;
  • --skill — уровень сложности от 1 до 5;
  • --no-sound и --no-music — отключение звуковых эффектов или музыки по отдельности.
реклама кормит Уточку 🦆

Перемотка через Ctrl+Z и сохранение через «Сохранить»

Поскольку каждый кадр в буквальном смысле становится очередной правкой документа Paint, у DoomPaint неожиданно появились функции, которых нет ни в одной другой версии игры. Комбинация Ctrl+Z отменяет последнюю вставку кадра — и фактически отменяет смерть персонажа или полученный урон, ведь для Paint это обычная операция отмены. А сохранение файла через стандартное меню Paint в любой момент создаёт настоящий PNG-снимок текущего кадра игры — просто потому, что с точки зрения программы пользователь всё это время что-то «рисовал».

Ближе к концу файла README Руссинович пишет: «Paint отображает игру, но не вычисляет её. Paint ничего не вычисляет. Paint никогда ничего не вычислял. В этом и заключается шутка». Исходный код DoomPaint открыт и распространяется под лицензией MIT.

Кто такой Марк Руссинович

Руссинович пришёл в Microsoft в 2006 году, привнеся с собой инструменты SysInternals, которые с тех пор стали одной из основ диагностики Windows. Сейчас он отвечает за архитектуру, безопасность и надёжность облачной платформы Azure, а в последний год также стал одним из самых заметных голосов, публично указывающих на многочисленные недостатки Windows 11.

реклама кормит Уточку 🦆

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