Как работает Doom в «Блокноте»: рассказывает Сэм Чиет
Фреймворк для блокнотных игр все еще в разработке.
Кстати, на сайте читать удобнее
Разработчик Сэм Чиет сумел сыграть в Doom при помощи «Блокнота»: изображение из игры выводилось прямо в стандартный текстовый редактор Windows. В интервью ArsTechnica Сэм рассказал, как это работает.
Организация игры в Doom через «Блокнот», объясняет Сэм, кажется сложным делом, но на самом деле все просто. В основе проекта лежит Chocolate Doom, порт оригинальной Doom на язык C#. Приложение, созданное Чиетом, покадрово анализирует все, что выдает игра.
Каждый кадр, созданный Chocolate Doom, преобразуется в ASCII-графику. Сперва для каждого пикселя усредняются данные цветового канала — это позволяет определить его яркость и подобрать соответствующий символ.
Для подбора Сэм составил специальную таблицу символов, каждому из которых назначена яркость. Например, самые темные пиксели рисуются символами «@» и «$» (просто потому, что они занимают много места), а самые светлые — «.» и «\».
Конвертация очень простая и, скорее всего, «неправильная». Но она работает и это единственное, что имеет значение. Фокусы вроде этого всегда в равной степени радуют и разочаровывают!
Сэм Чиет
Часть символов приходится отбросить. Дело в том, что шрифт в «Блокноте» прямоугольный, а пиксели квадратные: чтобы сохранить пропорции изображения, Сэм выкидывает каждую вторую строчку сгенерированного изображения.
Остается поместить сгенерированный текст в редактор. С управлением проблем нет: приложение Сэма перехватывает все нажатые клавиши, направляя их в игру.
Я краду ссылку на внутренний текстбокс [редактора], просто сливаю в него свою память через «сообщения» операционной системы, а затем заставляю [редактор] все перерисовать.
Сэм Чиет
К сожалению, у «Блокнота» нет буфера кадров и поддержки вертикальной синхронизации, имеющихся у обычных графических приложений. Именно поэтому изображение в проекте Сэма сильно мерцает.
Возможно, решение уже найдено: Сэму предложили использовать сразу два «Блокнота», имитируя двойную буферизацию. Разработчики намерен попробовать реализовать эту идею: Сэм думает, что может сработать.
Сейчас Чиет работает над фреймворком, позволяющий переносить в «Блокнот» любые игры. Параллельно Сэм экспериментирует с Paint, еще одним стандартным редактором Windows; по словам разработчика, «если DoomPad был просто фокусом, то моя работа с MS Paint потянет уже на эпизод Дэвида Блейна».