На протяжении десятилетий энтузиасты пытаются запускать оригинальный 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.
