Doom запускается в microsoft paint: как устроен doompaint от техдиректора microsoft azure

Doom запускается прямо в Microsoft Paint: как устроен DoomPaint от техдиректора Microsoft Azure

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

Автором эксперимента стал Марк Руссинович (Mark Russinovich) - технический директор Microsoft Azure и создатель набора утилит Sysinternals. Проект опубликован с открытым исходным кодом под лицензией MIT, а сам подход больше похож на инженерный трюк на стыке UI-автоматизации, работы с буфером обмена и перехвата ввода, чем на обычный "запуск игры".

---

Paint как монитор: как Doom попадает на холст

Ключевая идея DoomPaint - рендерить кадры Doom в фоне, а затем переносить их в окно Paint, используя буфер обмена. Программа отправляет изображение в clipboard и вставляет его на холст Paint с помощью Ctrl+V. По словам автора, реальная частота получается невысокой - примерно 3-10 кадров в секунду, но этого хватает, чтобы игра оставалась управляемой и проходимой.

Paint при этом "старается" вставлять как можно больше кадров подряд, превращаясь в необычный дисплей, который постоянно обновляется. Из-за особенностей Paint вставленный кадр появляется как плавающее выделение, поэтому сразу после вставки DoomPaint фиксирует его на холсте - для этого происходит переключение на инструмент "Кисти", чтобы выделение "прижалось" и стало частью изображения.

---

Что делает ViZDoom и почему он здесь

Вся вычислительная часть лежит на ViZDoom - сборке на базе ZDoom, созданной для исследований в области машинного обучения. ViZDoom загружает WAD-файлы и формирует кадры без вывода на экран, а DoomPaint уже занимается тем, чтобы эти кадры "оказались" внутри Paint.

В репозитории уже присутствует условно-бесплатный DOOM1.WAD (первый эпизод), поэтому искать свою копию для базового запуска не требуется. А вот если хочется пройти полную версию, тогда в папку wad добавляют doom.wad или doom2.wad.

Карты, которых нет в shareware-версии (то есть всё за пределами первого эпизода), берутся из наборов Freedoom с лицензией BSD - вместе с данными и музыкой.

---

Когда Ctrl+V не работает: запасной план вставки

Не все версии или сборки Paint корректно реагируют на программное нажатие Ctrl+V. Поэтому при старте DoomPaint выполняет самопроверку: если "горячая вставка" игнорируется, приложение переключается на альтернативный механизм - вставку через меню с использованием UI Automation. Это важно, потому что без стабильной вставки кадров "экран" в Paint просто перестанет обновляться.

---

Управление: почему нужен перехват клавиатуры

Чтобы Doom оставался игрой, ему нужно управление - но Paint тоже активно реагирует на клавиши, особенно на стрелки и сочетания. Поэтому DoomPaint использует низкоуровневый перехват клавиатуры WH_KEYBOARD_LL: иначе нажатия уходили бы в сам редактор и ломали бы вывод кадров.

Есть и нюанс со стрельбой: действие назначено сразу на две клавиши. Причина практичная - утилиты с собственными перехватчиками (например, PowerToys) могут "забирать" одиночное нажатие Ctrl, поэтому оставлена запасная клавиша F. Это также помогает в сценариях с удалённым рабочим столом и виртуальными машинами.

Дополнительно предусмотрено поведение "как у нормальной игры": переключение на другое окно ставит процесс на паузу, чтобы кадры не продолжали "сыпаться" в Paint бесконтрольно.

---

Paint становится частью геймплея: перемотка назад через Ctrl+Z

Самая необычная фишка DoomPaint - использование возможностей Paint не как декорации, а как механики. В обычной работе Ctrl+Z отменяет последнее действие, но здесь каждый вставленный кадр - это отдельный шаг истории. В результате Ctrl+Z превращается в перемотку игры назад, буквально по кадрам. По сути, это "реверс" без встроенной функции сохранений: вы откатываете холст - и вместе с ним визуально откатывается происходящее.

Ещё один приятный бонус: текущий кадр можно сохранить как обычный рисунок - через Файл → Сохранить в PNG, получая моментальный "скриншот" без отдельной кнопки.

---

Звук и музыка: два разных пути

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

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

---

Как запустить и что делать, если "окно сразу закрылось"

Для запуска используются bat-файлы. Если при старте окно мгновенно закрывается, наиболее вероятная причина - не установлен Python или во время установки не была отмечена опция добавления Python в PATH.

Для диагностики каждый запуск пишет журнал last_run.log, а run_debug.bat дополнительно выводит в консоль зарегистрированные нажатия - это полезно, когда нужно понять, что именно перехватывается и куда уходит ввод.

---

Параметры запуска: что можно настроить

Проект поддерживает набор аргументов командной строки, позволяющих подстроить запуск под себя: выбор карты (--map), набор данных Freedoom (--wad), масштаб изображения (--scale), уровень сложности (--skill), отключение звука или музыки (--no-sound, --no-music), а также регулировка громкости и выбор источника музыки (--music-volume, --music-wad).

---

Ограничения и особенности: чего в DoomPaint не будет

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

Также нужно понимать: 3-10 fps - это сознательная плата за формат вывода через Paint. Проект не пытается быть "самым быстрым Doom", он демонстрирует идею и нестандартную интеграцию с классическим приложением Windows.

---

Что в DoomPaint особенно интересно с инженерной точки зрения (дополнение)

Во-первых, это редкий пример, когда старый, максимально простой редактор изображений становится "поверхностью вывода" для динамической графики. Фактически DoomPaint обращается с Paint как с примитивным видеобуфером, но через непривычный канал - историю действий и вставку картинок.

Во-вторых, проект отлично показывает, насколько мощным может быть буфер обмена в Windows. Clipboard здесь - не вспомогательная функция, а центральная шина передачи кадров, от которой зависит плавность, задержка и общая стабильность работы.

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

В-четвёртых, идея "перемотки назад" через Ctrl+Z подчёркивает неожиданное: функции офисных и творческих программ иногда можно превращать в элементы игрового опыта. Это не просто шутка, а хороший пример переосмысления интерфейса - когда история действий становится временной шкалой.

В-пятых, подход DoomPaint полезен как мыслительный эксперимент для разработчиков, работающих с автоматизацией UI: он показывает, где заканчиваются "официальные" API и начинается реальный мир несовместимостей, из‑за которых приходится иметь запасной путь (вставка через UI Automation при проблемах с Ctrl+V).

Наконец, проект напоминает, почему Doom до сих пор остаётся идеальной платформой для экспериментов: игра компактная, хорошо изученная, её легко встраивать в нестандартные оболочки - от научных сборок вроде ViZDoom до самых безумных "экранов", включая обычный Paint.

---

Прокрутить вверх