Добавить в корзинуПозвонить
Найти в Дзене
Типичный программист

Doom на чистом Go

Переписать классический DOOM на Go без единого вызова C? Это реально. Репозиторий gore — порт doomgeneric, автоматически конвертированный из C через ccgo, а затем доведённый до ума вручную. Движок полностью абстрагирован от ввода-вывода через простой интерфейс DoomFrontend. Чтобы запустить игру на любой платформе, достаточно реализовать всего два метода — DrawFrame и GetEvent. Остальное опционально. Уже есть три готовых примера: — терминальный клиент с ANSI-графикой (Doom в консоли), — веб-сервер с управлением через браузер, — оконная версия на Ebitengine. Сборка под любую ОС, включая WebAssembly, прямо из коробки. Из нереализованного: глобальные переменные оригинала пока не дают запустить два экземпляра в одном процессе, и остались отдельные вызовы unsafe. Для запуска нужен Go 1.24+ и любой WAD-файл (поддерживаются DOOM, DOOM II, Ultimate DOOM, Final DOOM). Исходный код, примеры и инструкции — здесь: https://github.com/AndreRenaud/gore

Doom на чистом Go

Переписать классический DOOM на Go без единого вызова C? Это реально. Репозиторий gore — порт doomgeneric, автоматически конвертированный из C через ccgo, а затем доведённый до ума вручную.

Движок полностью абстрагирован от ввода-вывода через простой интерфейс DoomFrontend. Чтобы запустить игру на любой платформе, достаточно реализовать всего два метода — DrawFrame и GetEvent. Остальное опционально.

Уже есть три готовых примера:

— терминальный клиент с ANSI-графикой (Doom в консоли),

— веб-сервер с управлением через браузер,

— оконная версия на Ebitengine.

Сборка под любую ОС, включая WebAssembly, прямо из коробки. Из нереализованного: глобальные переменные оригинала пока не дают запустить два экземпляра в одном процессе, и остались отдельные вызовы unsafe.

Для запуска нужен Go 1.24+ и любой WAD-файл (поддерживаются DOOM, DOOM II, Ultimate DOOM, Final DOOM).

Исходный код, примеры и инструкции — здесь: https://github.com/AndreRenaud/gore

Шутеры
4634 интересуются