Многие годы на ресурсах около-компьютерной тематики регулярно всплывают сенсационные новости про «невозможные» порты легендарной игры Doom — как очередной энтузиаст и Кулибин запустил её и на этом, и на том, и каждый раз на всё более странных и неподходящих предметах. По разнообразию версий и безумию некоторых из них этот культурный феномен вполне может потягаться с Bad Apple.
Главное в этом, конечно, вау-фактор: «а что, так можно было?», подивиться и пойти дальше. Мало кто интересуется деталями, можно ли в это играть, действительно ли это Doom, действительно ли есть, чему удивляться, а если есть, то чему именно. И в целом — как и что именно на самом деле было сделано. Но мало кто — это не про нас. Мы — поинтересуемся!
▍ Истоки
Для начала надо напомнить, о чём вообще идёт речь.
Doom — компьютерная игра в жанре боевика с видом от первого лица, как говорили раньше — «вид из глаз», разработанная id Software и выпущенная в 1993 году для IBM PC-совместимых компьютеров. В своё время это был технологический прорыв: ранее на домашних компьютерах не было таких динамичных игр действия с настолько плавной и сложной трёхмерной графикой. Да и вообще нигде таких не было.
Catacomb 3-D и Wolfenstein 3D
Игра фактически завершила формирование жанра, начатое её предшественниками в лице Catacomb 3-D (1991), Wolfenstein 3D (1992), и стала своего рода золотым стандартом, породив сотни клонов: и самобытных, и созданных на лицензированном у id Software движке оригинальной игры. Случились и многочисленные продолжения, самое свежее из которых, Doom: The Dark Ages, было анонсировано буквально на днях.
Важной особенностью Doom является его необычная технология. Как вы знаете, это ещё не полноценная трёхмерная игра с полигональной графикой (это достижение реализовалось в последующем Quake). В её устройстве заложено множество компромиссов и ограничений, а также уникальных подходов, что, с одной стороны, обеспечило достойную производительность на слабых компьютерах своей эпохи, а с другой, придало игре узнаваемый дизайн. Есть и третья сторона: необычное внутреннее устройство заставило шевелиться немало извилин при адаптации игры к первым ласточкам нагрянувшей вскоре полигональной революции.
Многие помнят, что это игра эпохи 386-ых компьютеров. Например, потому что в школьных компьютерных классах, где они впервые познакомились с Doom, стояли «трёшки». Но 1993 год — это не только год выход Doom, но и первого процессора линейки Intel Pentium. Причём Pentium появился немного раньше, так как Doom вышел в самом конце 1993 года, 10 декабря. И хотя игра как-то может работать даже на 386-ом процессоре, для плавного геймплея, нормальной детализации и размера игрового окна рекомендуется 486-ой процессор и выше. Для слабых конфигураций предусмотрено уменьшение окна и понижение детализации — вероятно, так родились привычные ныне подробные настройки графики в играх для ПК.
Режимы High Detail и Low Detail в оригинальном Doom
Но всё же главное для нашей истории — не исторические заслуги и технологические достижения, не клоны и не сиквелы. Главное — порты. И они были, сотни их.
Во-первых, при участии самой id Software оригинальная версия игры в 1994-1997 годах и даже немного позже была перенесена на различные актуальные тогда игровые консоли. Где-то в этом принимал участие сам Джон Кармак, автор оригинального кода, а где-то другие люди под его чутким контролем или без такового.
Во-вторых, публикация исходного кода оригинальной игры в декабре 1997 года открыла портал, из которого хлынули неофициальные порты на всё, что движется. Этот же код послужил базой для разработки новых движков, запускающих Doom, а также многочисленных переизданий последующих десятилетий.
▍ Что ты такое?
Следующий немного странный, но на самом деле очень резонный вопрос, с которым надо разобраться — что такое Doom?
Дело в том, что за игрой стоит вполне конкретная и очень специфическая технология, которая непосредственно определяет и облик игры, и игровые возможности — в те времена и дизайн, и игровой процесс в играх строились вокруг того, что было доступно технически, а не вокруг дизайнерского или маркетингового замысла. И если бы при создании Doom авторам была доступна другая технология, получилась бы совершенно другая игра.
E1M1 в 3D-визуализации и в секторном представлении (окрашены разными цветами)
Движок Doom Engine, который позже стали называть id Tech 1, очень отличается от всего, что привычно нам сейчас. В нём нет полигонов и 3D-моделей, как нет и 3D-пространства как такового. Карта уровня на самом деле совершенно плоская, если смотреть на неё сверху. Она представляет собой набор отрезков, описывающих секторы — замкнутые области произвольной формы. Отрезкам назначается по две текстуры, по одной для разных сторон. Секторы соединяются друг с другом и как бы прорубают пустоту в полностью залитом пространстве, образуя пространство для перемещения игрока. Пол и потолок каждого сектора может иметь разную высоту, в том числе изменяющуюся динамически. Таким образом сделаны и ступени, и окна (щели-амбразуры), и лифты, и открывающиеся двери.
Сцена на экране и её представление в движке игры
Помимо такой своеобразной геометрии уровня широко используются спрайтовые объекты — враги, предметы, некоторые элементы окружения. Стены и спрайты рисуются в буфер отображения по столбцам, то есть камера не может быть наклонена набок. Отрисовка стен идёт от ближних к дальним, при этом формируется информация для последующего отсечения спрайтов. Полы рисуются другим хитроумным алгоритмом, построчно, с вычитанием занятого стенами пространства. Из-за необходимости экономии ОЗУ на все визуализируемые сущности были установлены очень жёсткие лимиты, что не позволяло делать произвольные сцены.
E1M1 в редакторе уровней
Как правило, когда речь идёт о запуске Doom, подразумевается хотя бы частичная адаптация оригинального исходного кода, в частности, игровой логики, и какое-то использование оригинальных ресурсов игры — геометрии уровней, хранящейся в специфическом формате и как-то адаптируемой под возможности целевой платформы.
Римейк Doom 64 в режиме wireframe
В истории были версии игры для более слабого железа на совершенно другой технологической основе, в том числе с другими способами хранения геометрии и рендеринга изображения, а также версии игры для более современных платформ с гораздо более продвинутыми полигональными движками, лишь имитирующими ограничения оригинальной игры, но способными на гораздо большее. Например, движок GZDoom в одном из режимов рендера строит полигональную модель уровня на основе оригинальной секторной геометрии, что позволяет реализовать более свободную камеру. А игра Doom 64, хотя и воссоздаёт многие ограничения и особенности оригинала, построена на новом движке с полигональным рендером окружения.
▍ Виды безумия
Великое многообразие версий и адаптаций Doom можно разделить на несколько видов:
- Максимально точные порты оригинального исходного кода с сохранением технологии программного рендеринга
- Порты для более мощных платформ с сохранением оригинальной игровой логики и ресурсов, но с изменением технологии рендеринга. В эту категорию попадают многочисленные ремастеры и движки с современными технологиями, типа Brutal Doom или PrBoom: Ray Traced
- Адаптации оригинального кода для работы на каком-то нетрадиционном железе, например, с полигональным растеризатором
- Адаптации оригинального кода для более слабого железа, с упрощениями, ограничениями и снижением качества визуализации
- Версии для ретро-платформ, использующие дополнения, добавляющие вычислительной мощности, необходимой для запуска Doom
- Просто другие игры, носящие то же название и пытающиеся воспроизвести эстетику оригинала
Нас в рамках сегодняшней темы интересуют четыре последние категории.
Запуск Doom на странных, слишком маломощных и очевидно неподходящих устройствах чаще всего немножко обман, дым и зеркала — магический фокус, чтобы создать яркое впечатление и заставить на секунду поверить в возможность невозможного. На самом же деле это может быть и не совсем Doom, и не всегда даже запуск. Чаще всего впечатление достигается с применением скрытого источника повышенной вычислительной мощности. Например, современного процессора, засунутого поглубже в картридж для старой игровой консоли.
Технология, на которой реализована та или иная версия, может значительно отличаться от оригинальной. Но набор характерных особенностей и ограничений игры остаётся прежним. Если же он не воспроизводится, это, конечно, не настоящий Doom, даже если игра носит такое название или использует спрайты из игры. Наиболее частый случай — движок типа Wolfenstein 3D с уровнями, построенными из кубиков одинакового размера, неизменной высотой пола и стен, без текстуры пола и потолка.
При этом в игре могут быть и текстуры, и враги, и оружие из оригинала. И можно называть её Doom’ом, чтобы сохранить ощущение волшебства. Но расчётливый ум инженера, конечно, понимает, что сравнимого технологического достижения в этом случае не происходит — это гораздо более простая и менее ресурсоёмкая технология, реализуемая на гораздо более слабых платформах, своего рода подмена понятий. Но и такой подход способен создать ощущение волшебства.
▍ Официальные Думы
Как я уже говорил, дело портирования Doom куда ни попадя начала сама id Software.
Версии игры были созданы для многих популярных игровых систем своего времени, в том числе недостаточно мощных или слишком отличающихся по возможностям и архитектуре. Так, у большинства из них не хватало мощности и памяти — как правило, это был уровень примерно 386DX-486SX и 2 мегабайта ОЗУ. Но при этом они обладали технологиями быстрого рендеринга полигонов или иных примитивов, и движок игры требовал адаптации, чтобы более-менее бодро шевелиться в таких условиях.
Оригинальный Doom для MS-DOS и Doom
Кратенько законспектируем интересные особенности главных версий этого периода. Сразу отмечу, что во многих консольных версиях часть уровней просто отсутствует, а присутствующие уровни местами могут иметь упрощённую геометрию и текстуры. Также в большинство консольных версий не явились Кибердемон и Спайдердемон. Заострять внимание на подобных отличиях не буду, им посвящено достаточно ресурсов в Интернете.
Atari Jaguar (1994) — исторически первый порт, его разработка началась раньше всех других. Для того, чтобы игра смогла достаточно хорошо работать на этой крайне непростой архитектуре, пришлось пойти на ухищрения. Рендерер, работающий на чипе TOM, был разбит аж на девять последовательно загружаемых микропрограмм, а чип JERRY, обычно занимающийся звуком, был задействован для обработки столкновений. Поэтому в данной версии полностью отсутствует музыка. Портированием занимался лично Кармак, а часть кода этой версии легла в основу версии для Sega 32x, 3DO, PlayStation и Game Boy Advance.
Sega 32x (1994) — исторически второй порт, который, однако добрался до публики самым первым. Игра идёт в уменьшенном окошке, в пониженном вдвое разрешении и не отличается большой плавностью, но имеет текстуры пола и потолка. Враги всегда смотрят на игрока, у них отсутствуют спрайты других направлений. Наиболее заметной особенностью этой версии является крайне неудачная адаптация оригинального саундтрека. Некоторое время назад появилась доработанная энтузиастами версия игры, в которой решены многие проблемы оригинального релиза, в том числе и добавлена улучшенная музыка.
Super Nintendo (1995) — первый представитель категории портов, использующих специализированное железо для увеличения вычислительной мощности целевой платформы. Фактически игра работает на 32-битном RISC-процессоре Super FX 2, установленном внутри картриджа с игрой и передающим наружу готовую картинку. Это, однако, не единственный «чит» — игра работает на уникальном движке, не имеющем ничего общего с оригинальной игрой. Отсутствуют текстурирование пола и потолка, спрайты разных направлений у врагов, используется пониженное разрешение. Несмотря на все эти компромиссы, наиболее яркой особенностью этой версии стала производительность на грани разумного — мало того, что игра отчаянно тормозит, она также имеет огромную задержку в управлении. Зато саундтрек адаптирован очень неплохо.
3DO Multiplayer (1996) — ещё один проблемный порт, страдающий от больших проблем с производительностью, местами уступающий даже версии для Sega 32x. Также используется уменьшенное окошко, но полное разрешение. Исторически игра выделялась спорным, но очень качественным саундтреком в CD-качестве, заново записанным живой рок-группой по мотивам оригинальных мелодий специально для игры. Сейчас же она знаменита ещё и историей разработки: как выяснилось, весь проект вытянул один человек за десять недель.
Sony PlayStation (1995) — первый наконец-то удачный порт. Вместо традиционных ухудшений он получил улучшения: 32-битный рендер, плавные цветовые градиенты, цветное освещение, а также совершенно другой саундтрек, поменявший атмосферу игры. Некоторые проблемы с производительностью возникли по вине самого Кармака: ему не понравился предложенный авторами порта прототип полигонального рендера с присущими PlayStation текстурными искажениями. Тем не менее, игра всё же хранит все текстуры и спрайты в видеопамяти и рендерит кадр через GPU. Но делает она это однопиксельными полосками, которые аппаратно растягиваются до нужной высоты. Такой комбинированный подход обеспечил стабильную картинку ценой снижения частоты кадров. Более подробно устройство этой реализации было рассмотрено в статье на Хабре.
Sega Saturn (1997) — а вот с версией для Saturn дело не заладилось, причём по той же самой причине: Кармак забраковал прототип с полигональным рендером, потребовав переделать его на программный. Но на этот раз мощности даже двух центральных процессоров этой довольно сложной архитектуры не хватило для обеспечения хорошей производительности. В результате игра страдает от низкой частоты кадров, а также очень сильного упрощения и геометрии уровней и текстурного разнообразия — парадоксально, но в этом отношении версия для Saturn уступает даже Sega 32x и Super Nintendo.
Game Boy Advance (2001) — первый в истории карманный Doom. Возможно, в этом проекте берёт своё начало традиция попыток адаптации игры для наиболее маломощных платформ, так как по слухам этот проект изначально предполагался для 8-битного Game Boy Color. Трудно представить, что могло из этого получиться, так как даже на 32-битном 16-мегагерцовом процессоре Advance игра работает не очень хорошо — по детализации уровней и по скорости работы она сравнима с версией для Saturn. Как ни странно, даже в 2001 году Кармак не разлюбил ходьбу по тем же граблям, и снова повторилась история с новым оригинальным 3D-движком, который в последний момент был заменён на порт кода для Atari Jaguar.
Nintendo 64 (1997) — вероятно первый в истории случай не-Doom’а. Совершенно другая игра с другой технологической основой, но носящая то же название и использующая оригинальную эстетику. Никак нельзя сказать, что этот Doom — не настоящий, но он определённо другой. У этой версии те же авторы, что и у версии для PlayStation, и в данном случае их затея с полигональным рендером не была выброшена: у Nintendo 64 нет проблем с искажением текстур, результат смотрелся стабильно и работал быстро, что устроило Кармака. Впрочем, может быть он просто не смог ничего разглядеть: игра знаменита своей экстремально тёмной палитрой (в видео выше ничего не преувеличено).
▍ Странные дни
Первая волна странных версий Doom нахлынула вскоре после выхода версии для Game Boy Advance, в эпоху мобильных телефонов на Symbian и Windows Mobile, а также устройств формата КПК.
Самая нашумевшая история тех лет, пожалуй, связана с запуском Doom на цифровой фотокамере Kodak Digital Science DC260 ZOOM 1998 года выпуска. Вы могли видеть эту новость и даже запомнить какой-то другой год, но на самом деле это произошло в 2000 году. С тех пор новость регулярно повторяется в СМИ. Очередной репост, например, в зарубежных источниках случился в 2023 году, а на Хабре он был в 2019 году.
На первый взгляд, удивительно, что можно запустить игру на такой старой фотокамере, на второй — что цифровые камеры вообще были в 1998 году, а на третий — что они были ещё и настолько мощными: внутри неё процессор PowerPC, работающий на частоте 66 мегагерц, 8 мегабайт ОЗУ, а также предусмотрен запуск сторонних приложений и органы для управления ими. То, что такой могучий аппарат способен запустить Doom, уже не так удивительно. Но начало было положено, и, как говорится, всё заверте.
Версия для DC260 впоследствии была адаптирована и для других камер, где обнаружилась возможность загрузки пользовательских приложений и достаточный объём ОЗУ — как на других моделях Kodak, так и на некоторых камерах Minolta Dimage, HP PhotoSmart, Pentax EI и других.
Разумеется, с появлением достаточно мощных мобильных устройств Doom был перенесён и на них — на многие популярные КПК и телефоны. Эти устройства были уже достаточно мощными (32-битный ARM на сотне-другой мегагерц), чтобы обойтись без больших ухищрений и без упрощений контента, и сейчас мало кто вспоминает эти весьма многочисленные версии. Но и им удавалось впечатлить пользователей осознанием того, что когда-то довольно требовательная игра стала доступна в отличном качестве в кармане.
В качестве дани уважения и чтобы наступить на вашу ностальгическую мозоль, перечислю некоторые продукты этой эпохи:
- WinCE Doom для Windows CE 2.0 и старше
- CellDoom для Windows Mobile
- HPC Doom для HP Jornada
- DoomPPC для Windows Mobile 5 и старше
- ZDoomZ для Palm OS 5.x с ARM процессором
- GfDoom для Windows CE, в том числе для устройств с процессорами MIPS и SH-3
- EDoom и EDoomS60 для телефонов Nokia Series 60 (в том числе N-Gage)
Ещё одна забытая категория устройств с портами Doom’а — корейские и китайские карманные портативки, типа GamePark и Dingoo, а также более официальные Gizmondo, Nintendo DS и PlayStation Portable, на которых не выходило официальных изданий игры. Это простые порты из исходного кода с адаптацией под местные экраны и особенности управления.
Чуть более удивительные и менее практичные, но технически очевидные порты случались на такую подзабытую ныне категорию устройств, как карманные MP3-плееры. В частности, на не настолько забытый Apple iPod — на все модели, где есть iPod Linux.
Другим любимым номером публики стал запуск Doom на разнообразных банкоматах и терминалах. Как и в случае с фотокамерой, впервые это случилось очень давно — затрудняюсь найти первый случай, но никак не меньше десяти лет назад. С тех пор и эта новость регулярно тиражируется в СМИ, удивляя всё новые поколения любопытствующих.
С технической точки зрения в этом нет ничего удивительного, в банкоматах и терминалах часто стоят вполне обычные компьютеры, работающие на вполне обычном Windows, а позитивные эмоции вызывает само наличие такой вот «пасхалочки», которую может вызывать к жизни каждый желающий. Даже в наших палестинах ещё не так давно это было возможно проделать на каждом встречном терминале QIWI.
В эту же категорию можно отнести и регулярные случаи запуска Doom на современных принтерах, кофе-машинах, автомобильных головных устройствах, контроллерах ЧПУ, цифровых осциллографах, смарт-часах, и так далее, и тому подобное. Все эти платформы обладают встроенными компьютерами с более чем достаточной производительностью, и запуск на них Doom — лишь вопрос времени, которое понадобится пытливым умам для нахождения способа загрузки собственных приложений в эти системы, при условии, что таковой не предусмотрен изначально.
▍ Меньше бит
Первые необычные порты случались на достаточно мощные платформы, обладающие каким-никаким подходящим процессором и ОЗУ. Но со временем удивить этим стало сложно, и в новостях стали отмечаться только гораздо более странные воплощения. Впрочем, история попыток адаптации Doom для слабых и неподходящих платформ началась задолго до этого, в конце 1990-х годов.
И начнём мы с отечественного продукта. Самого продукта, впрочем, не случилось, но ещё в сентябре 1996 года для любимого народного 8-битного компьютера ZX Spectrum группа энтузиастов из города Старая Русса (Новгородская область) выпустила демо-версию игры под названием Doom. Вторая демка, названная Doom pre-release v1.5, была опубликована в приложении к предпоследнему номеру популярного электронного журнала Spectrofon в июле 1997 года, через которое и нашла путь в народ. Выход игры намечался на сентябрь 1997 года, но что-то пошло не так. И если некоторые проекты тех лет спустя годы всплыли и получили какое-то продолжение, полной версии этой игры так и не появилось.
Технически отечественный Doom для ZX Spectrum представляет случай Wolfenstein 3D-подобного движка. Впрочем, и это большое достижение для такой маломощной платформы. Движок использует спрайтовую технологию — стены и враги выводятся заранее заготовленными спрайтами нужных размеров, а для стен и углов поворота камеры. Предусмотрено 32 угла поворота стен и как-бы текстура пола в виде набора спрайтов для каждого из углов. Игровая ситуация в первой демо-версии выводилась в монохромном окошке 128 на 64 пикселя, а в журнальной были добавлены цветные режимы с двукратным увеличением.
Эта первая попытка взбудоражила умы общественности, показав, что подобную игру в принципе можно сделать даже в таких рамках. Так начались новые, более удачные попытки реализации игр в жанре шутера от первого лица от других авторов и на других технологиях (нормальный рейкастинг и даже полигоны), но ни одна из них уже не выдавала себя за Doom. Полноценную же реализацию именно такой необычной спрайтовой технологии можно увидеть в игре The Dark от Oleg Origin, которая была разработана ещё в 1997 году, но широкой общественности стала известна только в 2010-х.
Впрочем, ещё одна попытка принести именно Doom на ZX Spectrum случилась в 1999 году на его очень продвинутом клоне под названием Sprinter 2000. Эта демо-версия не содержит противников и геймплея, но показывает технологию отображения Wolfenstein 3D-подобного окружения с очень неплохой плавностью. Для достижения подобной скорости работы были применены новейшие технологии: компьютер был построен на FPGA Altera, в которую специально для Doom загружалась особая конфигурация, умеющая очень быстро масштабировать вертикальные столбцы пикселей. Дальнейшего развития эта игровая разработка, к сожалению, не получила.
Но не только отечественные первые ретро-энтузиасты хотели видеть Doom на своих любимых 8-битных машинах. Их зарубежные коллеги тоже не отставали.
Первые их попытки следовали той же стратегии: сделать другую игру, которая технологически возможна в заданных рамках, но использовать в её оформлении элементы Doom. Ну как элементы — хотя бы название, да и то задом наперёд. Так в 1996 году родился проект M.O.O.D. Несмотря на крайне квадратную графику, по меркам платформы и эпохи это довольно-таки большое достижение — настоящий рейкастинг, какой-никакой геймплей.
Если наши разработчики сдались на полпути, энтузиасты Commodore 64 всё-таки довели идею до абсурда и до победного конца, и даже не один раз.
Первая успешная попытка случилась в 2016 году. Самый настоящий Doom, портированный из оригинального исходного кода, действительно был запущен на аутентичном Commodore 64 (и 128). Но не на базовой модели, а с применением так называемого SuperCPU — апгрейда родом из 1996 года, добавляющего 16-битный процессор 65C816, работающий на частоте 20 мегагерц, и 16 мегабайт ОЗУ. Этих мощностей хватило для получения какой-никакой производительности, и попытку вполне можно считать спортивной, так как всё железо в ней родом из прошлого века.
В 2022 году случилась и следующая попытка. На этот раз подход был иным: использовалось расширение RAD Expansion Unit, добавляющее в систему Raspberry Pi, на котором, собственно, и работает игра. Трюк в данном случае заключается в трансляции изображения в формат экрана Commodore 64. Выглядит и ощущается всё это как видеофильтр, наложенный на оригинальное изображение из игры, идущей на весьма приличном PC.
Любители предшественника Commodore 64, менее известного в наших краях и более примитивного компьютера Commodore VIC-20 (плюс-минус в одной категории с ZX Spectrum 48K), тоже хотели себе немного Doom’а. И хотя они никак не могли потягаться в технологии, ничто не помешало им взять название, узнаваемые образы и мелодию, и в 2010-ом году создать собственный vicdoom. Несмотря на исключительно низкую скорость работы и вырвиглазную местную графику, получилось на удивление неплохо.
Или вот приставки. Городская легенда из детства — к другу друга приезжал дядя и привозил картридж для Денди, на котором был Doom! Похуже, конечно, чем на компьютере, но настоящий! Вот только дядя уже уехал и картридж увёз с собой.
Не волнуйтесь, в 2019 году дядя наконец-то вернулся и привёз этот картридж. Правда, это оказался картридж для NES, а внутри него — опять Raspberry Pi. Результат снова выглядит как видеофильтр поверх видео с геймплеем. В данном случае и это — достижение, так как из-за особенностей архитектуры NES даже просто отобразить полноэкранное изображение на ней довольно непросто.
Главная проблема подобных адаптаций — результат не выглядит аутентично, он совершенно не похож на то, как если бы игра существовала в реальности. Слишком плавно, слишком нетипичная картинка, отсутствие привычных сеток в дизайне: слишком хорошо, чтобы быть правдой, Станиславский не поверит. Но всё же интересно.
Есть и проекты с аутентичным подходом. Как вы знаете, есть коммерческий порт Doom для Sega 32x — дополнения для обычной 16-битной Sega Genesis, содержащего два 32-битных RISC-процессора. В недавнее же время была осуществлена попытка портирования оригинального исходного кода на стандартную Sega Genesis без каких-либо расширений, то есть на процессор 68000, работающий на частоте 7 мегагерц, маленькое ОЗУ и очень специфическую видеосистему. Результат под названием MegaDOOM, конечно, получился крайне неторопливым, и это не полноценная игра, а всего лишь рендер окружения, но всё же эксперимент весьма интересный.
Также в 2021 году появился одноимённый проект Megadoom, позволяющий запустить очень неплохую версию Doom на обычной Sega Genesis, но с использованием необычного картриджа, а именно, Mega Everdrive Pro — Flash-картриджа украинского разработчика с ником Krikzz, который уже много лет обеспечивает всю ретроигровую сцену крутейшими Flash-картриджами собственной разработки и производства для самых разных игровых консолей прошлого. Для этого проекта им была разработана специальная прошивка FPGA в картридже, обеспечивающая приставку необходимой вычислительной мощностью для запуска игры — решение, невозможное в середине 1990-х, но доступное сейчас. А если оно есть, почему бы не порадоваться открывшимся возможностям?
Довольно неожиданной точкой спауна малокалиберных версий Doom стали калькуляторы. Только не обычные, а графические — класс карманных устройств, предшествовавший КПК и смартфонам, ныне окуклившийся и продолжающий своё существование в параллельной реальности. Для этих устройств есть не одна, не две, а минимум три версии Doom.
Doom83, позже известный как zDoom, разрабатывался с 2002 года. Он работает на калькуляторах Texas Instruments TI-83 и TI-84+. Эти калькуляторы обладают 8-битным процессором Zilog Z80, работающим на частоте 6 мегагерц, монохромным графическим дисплеем 96 на 64 точек а также примерно 32 килобайтами ОЗУ для всех установленных пользовательских программ. Сама игра имеет размер около 16 килобайт. Для экономии памяти используется весьма необычная технология: стены уровня отображаются векторной графикой, а враги традиционными спрайтами. В остальном же это типичная Wolfenstein 3D-подобная игра, использующая название, логотип и некоторые графические элементы из Doom.
Doom89 для Texas Instruments TI-89 и TI-92+ вышел примерно в 2008 году. Эта линейка калькуляторов значительно мощнее TI-83. Она имеет процессор Motorola 68000 с рабочей частотой около 14 МГц, экран 160 на 100 точек с градациями серого, и 256 килобайт ОЗУ. Игра соответствует — это всё ещё клон Wolfenstein, но теперь с текстурами стен и спрайтами из оригинального Doom в чёрно-белой графике. Впрочем, из-за специфики платформы она по-прежнему вынуждена умещаться в скромный объём памяти — около 20 килобайт.
И, наконец, NDoom для TI-Nspire. Эта новейшая (представлена в 2010 году) линейка калькуляторов обладает процессором ARM9, некоторыми мегагерцами и мегабайтами, и в целом достаточными ресурсами, чтобы запустить оригинальный Doom. Некоторый подвох кроется в экранчике: хотя его разрешение уже полноценный 320 на 240, он по прежнему чёрно-белый, и данный порт работает в градациях серого и не имеет звука. В остальном же это уже вполне человеческий Doom.
И из самых актуальных, горячих портов подобного разлива необходимо упомянуть Doom для модного молодёжного хакерского мультитула Flipper Zero, публикаций о котором полнится и Хабр, и Интернет. И конечно, без Doom’а дело не обошлось. Это устройство обладает монохромным экранчиком 128 на 64 точки и процессором STM32 с относительно скромными характеристиками, а значит, традиционного порта из оригинальных исходников не получилось. Зато получилась довольно милая версия по заветам калькуляторных Doom’ов или Doom Nano для Arduino: Wolfenstein 3D-подобная, со стенами без текстур, и спрайтами, отдалённо напоминающими оригинал. Очень плавная и с мелодией At Doom’s Gate на пищалке. Всё как мы любим!
▍ Страньше и страньше
До сих пор мы рассматривали вполне традиционные реализации Doom, порой сделанные в сильных ограничениях, с желанием реализовать и в них хоть сколько-то узнаваемую версию любимой игры, даже если она написана заново и от оригинала осталась только идея в следовых количествах.
Но есть и другая категория проектов. Почти все они так или иначе транслируют изображение из запущенной на обычном PC вполне обычной версии Doom в ограничения выбранного способа отображения, и потому сказать, что «Doom запущен на (чём-то)» здесь нельзя — он не запущен на этом, а только отображается. Но и выбранная форма отображения способна удивить.
В эту категорию входит самая разнообразная дичь, созданная ради хайпа или из любви к искусству. И это прекрасно! Рассмотрим несколько любопытных вариантов — конечно, далеко не все, для этого не хватит никакого терпения.
Например, если вам надоело играть в Doom на лицевой стороне экрана вашего ноутбука — можно поиграть на обратной. Правда, понадобится особый ноутбук, с управляемой матричной подсветкой на задней крышке, такой как Zephyrus G14.
Или можно играть не на экране, а на клавиатуре. Речь идёт о премиальных клавиатурах, оснащённых управляемой RGB-подсветкой для каждой клавиши и управлением по протоколу SignalRGB, или какими-либо экранчиками.
Можно сыграть в Doom на одной RGB-клавиатуре. В системных требованиях будет развитая фантазия: разглядеть что-то в таком разрешении очень непросто.
Но если взять 120 таких клавиатур и собрать из них матрицу 10 на 12, получится разрешение, примерно соответствующее 160 на 80, с пропусками в столбцах и строках, и картинка станет гораздо понятнее.
Многие модели ноутбуков линейки MacBook Pro с 2016 года оснащаются панелью Touch Bar — вытянутым в ширину маленьким цветным экранчиком над клавиатурой. на котором штатно располагаются иконки приложений и прочие полезности. Разумеется, появление здесь Doom было неизбежно.
Существуют особо дорогостоящие клавиатуры, в которых каждая клавиша оснащена своим экранчиком. Например, Optimus Maximus от студии Артемия Лебедева (берегите олдскулы). Предположительная польза такого решения в возможности отображения любых алфавитных раскладок, иконок для горячих клавиш приложений и тому подобного. Но кому это нужно, когда вместо буквы можно отобразить целый Doom.
Doom в кнопке клавиатуры
Существует и более доступная массам реализация: Doom в формате одиночной клавиши для обычной клавиатуры. Это микроскопическая игровая система на Raspberry Pi RP2040 с цветным TFT-экранчиком, размещённая внутри миниатюрного корпуса.
Doom в интерфейсе Windows
Технически очень простая задумка, но при этом эффектная — Doom на элементах интерфейса Windows. Есть несколько вариаций: Doom в иконке на панели задач, Doom на группе иконок рабочего стола, Doom в символьном виде в рабочем поле Блокнота. Принцип всюду одинаков: перехватывается нужное окно, вставляется изображение или, в случае Блокнота, текст.
С версий для Блокнота связана группа Doom’ов, использующих преобразование изображения в символы. Подбор наиболее похожего глифа из ограниченного набора — достаточно простая задача, но результат может быть очень даже эффектным. Например, таким образом можно поиграть в Doom через терминал Linux.
Или же можно применить эту идею к технологии глубокой древности — Телетексту родом из 1979 года. В оригинале он, конечно, не обладает достаточной скоростью передачи данных, но в более поздних его реализациях с помощью некоторых хаков удалось получить очень даже неплохую скорость обновления экрана. Doom на Телетексте мог бы выглядеть банально, но специфический набор символов и дополнительное оформление спасает ситуацию, выглядит очень мило. Сама игра, конечно, работает на ПК.
Ещё более креативная идея: можно преобразовать изображение в звуковой сигнал, который при просмотре в формате спектрограммы будет воссоздавать исходную картинку, только с медленной развёрткой. Почти SSTV.
Также можно преобразовать изображение в векторы, и отобразить его на экране единственной векторной игровой консоли — Vectrex. Я не отнёс эту реализацию к категории ретро, потому что сама игра, конечно же, работает на более мощном железе. Подробностей мало, но похоже, что здесь реализован тот же сценарий, что и в Doom для NES: специальный картридж с Raspberry Pi внутри.
Все помнят советскую электронную игрушку «Ну, погоди!» про волка и яйца, а кто-то знаком и с зарубежными оригиналами от Nintendo. Запустить настоящий Doom на подобных устройствах, конечно, никак не получится из-за ограничений технологии — экран с фиксированным сюжетом и крайне маломощный 4-битный процессор внутри. Но представить, как могла был выглядеть такая игрушка, можно: её прототип был изготовлен для эпизода YouTube-шоу Angry Video Game Nerd, посвящённого играм серии Doom. Это не настоящее действующее устройство — стилизация для корпуса была изготовлена физически, но игровой процесс просто нарисован и наложен в видео. И тем не менее!
Ну и конечно же, нашумевший в 2020 году тест на беременность, на котором как бы запущен Doom. К сожалению, именно технического креатива в нём меньше, чем в большинстве освещённых в этой статье проектов: это просто корпус от теста, в который установлен монохромный OLED-экранчик с разрешением 128 на 32 пикселя, на который передаётся видеопоток игрового процесса с обычного ПК. Тем не менее, идея очень понравилась массам.
▍ Замыкая круг
Пожалуй, самое интересное, на чём был запущен Doom — Doom. Речь идёт про Doom, работающий внутри Doom.
Первая, достаточно простая реализация этого замыкания была реализована в 2008 году в движке GZDoom, предназначенном для запуска оригинального Doom на более современных компьютерах с рядом улучшений. Среди этих улучшений есть и возможность запускать дополнительный код, и передача данных из кода в графику текстур. Эти возможности сначала были задействованы для встроенного эмулятора аркадных автоматов. Оставалось лишь додуматься до идеи, и внутри Doom стало возможно играть в Doom.
Но новый движок — это всё-таки чит. Мы должны пойти глубже. И в 2022 году мы пошли. Doom был запущен внутри оригинального движка Doom для MS-DOS, в версии Doom II. Это стало возможным благодаря нахождению эксплойта, позволяющего выполнять произвольный код из WAD-файла. И конечно, этим кодом стал порт Chocolate Doom (осовремененный портабельный код оригинального движка без нововведений). А потом ещё и Chocolate Heretic, потому что круче, чем Doom внутри Doom может быть только Heretic внутри Doom.
Я не настолько хорошо знаком с устройством оригинального движка Doom — его разбору можно посвятить целую книгу. Поэтому даже не буду пытаться пересказать объяснения автора, как именно он реализовал свой эксплойт и отображение виртуального буфера кадра в игровые текстуры. Лучше предоставлю слово ему самому:
▍ Заключение
Кажется, Doom уже запустили практически на всём. Но я практически уверен, что в будущем мы сможем увидеть его новые, ещё более необычные воплощения.
Зачем всё это надо? Удивляться и удивлять — не самая плохая причина. И, конечно, вовлечение аудитории: а какой Doom удивил вас?
Telegram-канал со скидками, розыгрышами призов и новостями IT ?
Комментарии (18)
kometakot
18.06.2024 11:11+3Когда уже прямо в мозг портируют? Помню, была какая-то кривая версия тетриса, в которую в детстве играл с закрытыми глазами перед сном, но там были глюк на глюке.
da-nie
18.06.2024 11:11+11Я не настолько хорошо знаком с устройством оригинального движка Doom — его разбору можно посвятить целую книгу.
Я в 2002 написал свой DooM. Всё никак не соберусь его переписать в нормальный вид.
А работает так (с 3:19):
NickDoom
18.06.2024 11:11+2Сама игра имеет размер около 16 килобайт. Для экономии памяти
используется весьма необычная технология: стены уровня отображаются
векторной графикой, а враги традиционными спрайтами.Я в 90-е написал аналогичный рендерер, потенциально способный работать на 8086/CGA. И таки переписал в нормальный вид по случаю оргии ретро-кодеров. Если есть желание, можно прикрутить туда нормальные думовские сектора :) Но сначала, конечно, надо бы проверить на реальном 86-м…
В принципе, могу попробовать что-то ещё более «ретровое» и ещё более быстрое :) О результатах (если будут) отчитаюсь статейкой :)
Alexey2005
18.06.2024 11:11+3А теперь портируйте DOOM на HTML+JS и попытайтесь запустить это на мобильных устройствах через встроенный браузер. И вы сразу же наглядно увидите, насколько же современный Веб убогая и неэффективная технология. Ведь то, что отлично работает даже на древних кофеварках и калькуляторах, здесь нещадно тормозит.
И ладно бы просто тормозило! Так ведь ещё и глючит нещадно из-за проблем с совместимостью. На половине девайсов оно вообще не заведётся, причём даже без выдачи сообщения об ошибке (консольку-то в мобильные браузеры до сих пор не завезли), а на половине оставшихся будет работать с глюками.
Например, есть такой браузерозаменитель как Safari, так на нём DOOM почти наверняка будет идти без звука, потому что заставить на этом урезанном огрызке браузера работать звуковые эффекты - задача титанической сложности.
vvzvlad
18.06.2024 11:11+3https://silentspacemarine.com/
А в чем проблема? Работает, быстро.Alexey2005
18.06.2024 11:11На десктопе - да, на моём смартфоне - нет: изображение сильно мерцает (такое впечатление, что вместо половины кадров рендерится чёрный экран), вместо звука шипение. Скорость тоже низкая, где-то в районе 3 FPS. Неиграбельно.
При этом на том же смартфоне плавно и без тормозов работают эмуляторы PSP и PS One.
Shaginov
18.06.2024 11:11+3Тот дум что по ссылке выше, на моём стареньком Galaxy S9 в браузере Opera работает абсолютно без тормозов.
ef_end_y
18.06.2024 11:11+5Я недавно портировал на очки fpv. По сути объединил код самих очков и код doom-а.
onets
18.06.2024 11:11+4Что то никто не сделал дум с лучами
Пс: хотя нет, сделали https://m.youtube.com/watch?v=-iXFOwTEynk просто в статье не упомянули
unreal_undead2
18.06.2024 11:11+1Да, похоже проще перечислить то, на чём Doom'а не было ) Есть мнение, что это было одним из гвоздей в гроб Амиги.
MasterMentor
18.06.2024 11:11Во всей этой истории вокруг Дума два ключевых слова "движок" и "порт" (перенос алгоритмов/кода/графики на другое железо с минимальным вмешательством в них). Всё остальное, что не входит в эти категории, как Вы поэтично сказали "немножко обман, дым и зеркала — магический фокус". Простое использование распиаренного ярлыка для привлечения внимания к продукту своего творчества.
По задумке и эстетике больше всего всего понравились:
Старая Русса Doom pre-release v1.5
The Dark от Oleg OriginНо это абсолютно свои игры, разве что художественный образ "руки" и стен взяты из Дума.
Действительно хороший порт - Sega Saturn (1997). Там виден и новый собственный рендер, и куски оригинальных уровней/кода. А эффект Scainline и более интересные текстуры делает его эстетически значительно лучше оригинала.
Вариант Телетекст родом из 1979 года. тоже интересен за счёт эстетики (хорошо подобранных цветов + раскадровка как в комиксах).
А все остальные "клавиатуры и памперсы" - может и заслуживают упоминания идей в одну строку через запятую, но интереса ничем не вызывают: ни эстетикой, ни идеей. Половина из них - вариации на тему как подключить другой телевизор/проектор к компьютеру, на котором играют в Дум. Так и я могу: берёшь проектор, и проецируешь дум на стену - вот тебе и Дум на Доме.
unreal_undead2
18.06.2024 11:11+1Чисто технически (с точки зрения работы программиста) интересен порт на SNES - написанный без доступа к оригинальному исходному коду и нормальной документации/инструментария для работы с Super FX чипом, критичным для достижения хоть какой то производительности на этой приставке.
axe_chita
18.06.2024 11:11+1Можно ещё добавить в список DOOM-ов, нативные порты на китайские портативные консоли в формате PSP. Там было двойное превозмогание, модификацией кода DOOM под кривоватый утёкший SDK, и железо которое под этим SDK работало не всегда корректно.
NickDoom
18.06.2024 11:11+1Жаль, что Спекки на закате своей популярности не получил никакого общепризнанного фэндомом 2Dfx :) Что бы это могло быть, чтобы сам Спекки не превратился в клавиатурный придаток к «видеокарте»? Какие были дешёвые микроконтроллеры, например?
shiru8bit Автор
18.06.2024 11:11Теоретически ускоритель был создан в конце 1990-х: звуковая карта General Sound. У неё на борту Z80 на 12 МГц и куча быстрого ОЗУ. Всё это дело вместо генерации звука может выполнять произвольный код параллельно хоста и быстрее него. Но в те времена его никто так и не приспособил подобным образом. Единственный раз GS задействовали для ускорения графики только в 2009 году, и это была уже обновлённая версия, вдвое быстрей и с DMA для обмена с хостом.
search_facility
Познавательно, спасибо!