Игровой движок DOOM занимает уникальное место в истории компьютерных игр и программирования. Его архитектура, возможности и влияние на индустрию остаются непреходящими. В последние годы на платформе Go появился интересный проект под названием Gore — минималистичный порт движка DOOM, выполненный полностью на Go, что открывает новые горизонты в области кроссплатформенной реализации классических игр. Gore — это не просто конверсия кода, а попытка сохранить дух оригинала и при этом максимально адаптировать его под современные стандарты и возможности языка Go. Изначально Doomgeneric является чистым C-реализацией движка DOOM, а Gore представляет собой транспиляцию исходников doomgeneric на Go с последующей ручной доработкой для повышения удобства и безопасности.
Создатель проекта использовал инструменты автоматического преобразования, а затем рефакторил весь код в стиле идиоматического Go, избавляясь от избыточных низкоуровневых манипуляций с указателями. Благодаря этому появилась возможность использовать сборщик мусора, устраняя традиционные проблемы с переполнением буфера и ошибками управления памятью, которые свойственны языку C. Особенностью проекта Gore является его платформенная независимость. Его можно запускать на любой системе с установленным Go, будь то Linux, Windows, macOS или устройства с ARM-архитектурой, включая Raspberry Pi. Данная кроссплатформенность даёт возможность разработчикам и энтузиастам легко портировать классическую игру на новые устройства без необходимости писать низкоуровневый код для каждой ОС.
Это стало возможным благодаря отсутствию зависимости от CGo и минимальному набору сторонних библиотек — в проекте задействован лишь стандартный набор инструментов и пакетов Go. Поддержка множества версий DOOM — ещё одна сильная сторона Gore. Он может работать с разнообразными оригинальными игровыми наборами данных — WAD-файлами, включая DOOM, DOOM II, Ultimate DOOM и Final DOOM. Это дает пользователям свободу выбора, а также возможность загружать кастомные карты и ресурсы, расширяя игровой опыт. Минималистичность реализации отражается в интерфейсных решениях.
Для ввода и вывода данных движок использует внешние адаптеры, которые должны реализовывать интерфейс DoomFrontend. Он предусматривает методы для отрисовки кадров, установки названий окон и получения пользовательских событий, что позволяет адаптировать Gore для работы в разных типах приложений — от терминала с ANSI-цветами до графических окон и веб-интерфейсов. В комплекте с проектом идут примерные реализации терминального, веб-серверного и графического клиента на базе Ebitengine. Терминальный интерфейс демонстрирует уникальный подход к отображению игрового процесса с помощью ANSI-цветов, что идеально подходит для пользователей, предпочитающих работать через консоль. Хотя поддержка управлением здесь ограничена — отсутствует полноценное распознавание отпускания клавиш или управления клавишами Ctrl, — сам факт успешной реализации этого варианта поражает и открывает новые возможности для ретро-игр на «слабых» терминальных эмуляторах.
Веб-версия Gore также является достойным примером современного подхода. Запуск локального сервера и последующая игра в браузере значительно упрощают процесс погружения в легендарный мир DOOM без необходимости сложных настроек. Такой подход актуален для широкой аудитории и демонстрирует потенциал Go в создании приложений с разнообразными пользовательскими интерфейсами. Несмотря на все преимущества, проект Gore еще не является полностью завершенным. В коде присутствуют глобальные переменные, которые затрудняют запуск нескольких экземпляров игрового движка в одном процессе.
Также при экспорте констант из оригинального кода на C нередко возникают ситуации, когда внутренние элементы становятся внешне доступными, что требует дополнительного контроля и рефакторинга. И, несмотря на значительный прогресс, в проекте все еще используется пакет unsafe, что делает невозможным 100% безопасность по стандартам языка Go. Устранение таких участков — перспективное направление развития. Установка Gore крайне проста и не требует долгой подготовки. Необходим только язык Go версии 1.
24 и актуальный WAD-файл с играми DOOM. Исходники доступны на GitHub, где разработчик постоянно обновляет и улучшает проект. Для запуска примеров достаточно получить соответствующие игровые данные и с помощью команды go run запустить желаемый модуль. Это позволяет как новичкам, так и профессионалам быстро погрузиться в процесс и при необходимости внести собственные улучшения. Проект Gore заслуживает внимания не только благодаря своей технической реализации, но и благодаря принципу открытости и свободного распространения: исходный код распространяется под лицензией GPL-2.
0, что соответствует лицензии оригинального DOOM. Это гарантирует сохранение философии открытых игр и предоставляет широкие возможности для изучения и модификации движка. Команда разработчиков уже демонстрирует различные тесты и примеры, которые помогают глубже понять структуру и возможности этой уникальной портированной реализации. Gore — наглядный пример того, как классический игровой движок может получить новую жизнь с помощью современных технологий и языков программирования. Он доказывает, что Go, несмотря на свою репутацию языком серверной разработки, способен эффективно справляться с задачами, требующими высокой производительности и портируемости мультимедийных приложений.
При этом проект помогает изучать внутреннее устройство игрового движка DOOM на новом языке, что полезно как для разработчиков игр, так и для системных программистов. Перспективы развития Gore включают укрепление безопасности кода, расширение интерфейсных возможностей и улучшение поддержки многопоточности для одновременного запуска нескольких экземпляров игры. Также дальнейшее развитие позволит создавать более удобные API для внешнего контроля состояния игры и облегчить настройку пользовательских модов и карт. В конечном итоге проект может стать платформой для любительских разработок и образовательного контента, раскрывая многообразие возможностей классического DOOM в современном сообществе. Таким образом, Gore — интересный и перспективный проект, реализующий портал классического игрового движка Doom на языке Go.
Он сочетает в себе инновационные технологии и уважение к классике, предоставляя стабильную и независимую от платформ среду для игры и разработки. Все эти преимущества делают Gore достойным претендентом на внимание широкой аудитории разработчиков, геймеров и фанатов ретро-игр.