Doom работает внутри Paint: проект DoomPaint от технического директора Microsoft Azure

2026-08-05 174 комментарии
Проект DoomPaint выводит кадры Doom на холст Microsoft Paint через буфер обмена со скоростью до 10 кадров/с. Игра остаётся полностью управляемой, а отмена действий в Paint позволяет перематывать её назад.

На протяжении десятилетий энтузиасты пытаются запускать оригинальный Doom на самых необычных устройствах. Новый проект развивает эту идею в другом направлении: автор не переносил игру на нестандартное оборудование, а изменил способ вывода изображения. В DoomPaint графический редактор Microsoft Paint используется в качестве «монитора» для Doom.

Автором проекта стал Марк Руссинович (Mark Russinovich), технический директор Microsoft Azure и создатель набора утилит Sysinternals. Исходный код опубликован на GitHub под лицензией MIT. Частота кадров невысокая – по описанию самого автора, в районе 3–10 кадров/с, однако игра остаётся полностью играбельной. Paint старается вставлять на холст как можно больше кадров, превращаясь в необычный экран для Doom.

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

Всю вычислительную работу берёт на себя ViZDoom – сборка на базе ZDoom, созданная для исследований в области машинного обучения. Она загружает настоящий условно-бесплатный файл DOOM1.WAD и формирует кадры в фоне, без вывода на экран. Карты, которых нет в условно-бесплатной версии, то есть всё за пределами первого эпизода, берутся из наборов Freedoom с лицензией BSD.

На странице проекта в GitHub сообщается:

Сам движок Doom – ViZDoom – запускает настоящий условно-бесплатный файл DOOM1.WAD и формирует изображение без вывода на экран. Каждый кадр помещается в буфер обмена Windows, а затем вставляется на холст Paint как обычное редактирование документа.

Основной способ вставки – программное нажатие Ctrl+V. Некоторые сборки Paint такие нажатия игнорируют, поэтому при старте выполняется самопроверка, и при неудаче программа переключается на вставку через меню средствами UI Automation. Вставленный кадр появляется как плавающее выделение, поэтому сразу после вставки он прижимается к холсту переключением на инструмент «Кисти». Игровые клавиши забирает низкоуровневый перехватчик клавиатуры (WH_KEYBOARD_LL), иначе стрелки и другие нажатия уходили бы в сам Paint и обрывали вывод кадров.

Функции Paint как часть игры

Возможности самого редактора тоже стали частью игрового процесса. Сочетание Ctrl+Z, которое обычно отменяет последнее действие, позволяет перематывать игру назад: каждый кадр является отдельным шагом отмены. Кроме того, текущий кадр можно сохранить в формате PNG через стандартное меню Файл > Сохранить – так же, как обычный рисунок пользователя.

Руссинович пояснил:

Paint выводит изображение игры, но не обрабатывает его. Paint ничего не вычисляет. Paint вообще никогда ничего не вычислял. В этом и заключается шутка.

Управление

Управление в DoomPaint имеет несколько особенностей. Стрельба назначена сразу на две клавиши: утилиты с собственными перехватчиками клавиатуры, например PowerToys, могут забирать одиночное нажатие Ctrl, поэтому клавиша F оставлена как запасной вариант – в том числе для удалённого рабочего стола и виртуальных машин. Переключение на другое окно ставит игру на паузу.

  • W, S или стрелки вверх и вниз – движение вперёд и назад
  • A, D или стрелки влево и вправо – поворот
  • Q, E (либо запятая и точка) – шаг вбок
  • Ctrl или F – огонь
  • Пробел – действие, открыть дверь
  • Shift – бег
  • F12 – выход

Звук и музыка

Звуковые эффекты воспроизводит сам движок через OpenAL. Файл run.bat подменяет входящую в ViZDoom библиотеку OpenAL-Soft 1.21 на версию 1.24: старая продолжала играть в устройство, выбранное при запуске системы, поэтому смена наушников на ходу оставляла звук на колонках.

С музыкой ситуация сложнее: воспроизведения музыки в ViZDoom нет, поэтому DoomPaint достаёт музыкальный фрагмент карты прямо из WAD-файла, при необходимости преобразует формат MUS в MIDI и проигрывает его через встроенный в Windows MIDI-секвенсор. Громкость музыки по умолчанию выставлена на 40 из 100 – MIDI-синтезатор заметно громче эффектов движка.

Как запустить

Условно-бесплатный файл DOOM1.WAD с первым эпизодом игры уже включён в репозиторий, поэтому пользователю не нужно искать собственную копию. Она потребуется только в том случае, если он захочет запустить таким способом полную версию игры: файл doom.wad или doom2.wad кладётся в папку wad.

  • Установить Python и отметить при установке пункт Add python.exe to PATH.
  • Скачать с GitHub архив DoomPaint-main.zip и распаковать его.
  • Запустить файл run.bat – при первом запуске создаётся виртуальное окружение Python и устанавливаются зависимости.

Если файл сразу закрывается после запуска, вероятно, на компьютере не установлен Python или при его установке не был отмечен пункт добавления в PATH. Для разбора проблем каждый сеанс пишет журнал last_run.log, а файл run_debug.bat дополнительно выводит зарегистрированные нажатия в консоль. На странице проекта в GitHub также перечислены параметры запуска: выбор карты (--map), набора Freedoom (--wad), масштаба (--scale), уровня сложности (--skill), отключение звука и музыки (--no-sound, --no-music), а также громкость и источник музыки (--music-volume, --music-wad).

Ограничения

ViZDoom стартует сразу на карте, поэтому заставок, демозаписей и внутриигровых меню в DoomPaint нет – условно-бесплатный WAD-файл настоящий, а вот привычной оболочки вокруг него не осталось. За пределами первого эпизода игра переключается на данные и музыку Freedoom.

© .
Комментарии и отзывы

Нашли ошибку?

Новое на сайте