Doom в браузере на чистом TypeScript
Представляю завершённый pet-проект — порт движка Doom 1/2, полностью переписанный с нуля
Это не запуск через DOSBox и не WebAssembly-обёртка.
Движок реализован как честный software rendering на TypeScript и работает прямо в браузере, отрисовывая каждый пиксель на 2D Canvas — по тем же принципам, что и в 1993 году. При написании я опирался на исходники оригинального Doom (https://github.com/id-Software/DOOM)
Проект начался как эксперимент и в итоге вырос в полноценную реализацию. Значительная часть работы выполнялась с использованием ИИ Claude, при этом вся разработка заняла около трёх недель. Опыт в разработке и ИТ с 2003 года позволил сохранять полный контроль над процессом, так как проект несмотря на наличие исходников весьма не простой и требовал много внимания к архитектуре и деталям, по факту ничего нельзя пропустить и оставить без внимания
Игра использует оригинальные ассеты работая напрямую с WAD файлами
При этом добавил пару доработок (все настраиваются в меню Options):
TrueColor
Полноценный цвет без ограничений палитры в 256 цветов
Динамическое освещение
Источники света, которых не было в оригинальной игре
Поддержка высоких разрешений
Без привязки к 320×200 — можно запускать в любом разрешении. Правда если поставить боль 960х600 то браузер уже тяжелее справляется и выдать стабильные 30 FPS ему сложнее
Freelook (свободный обзор)
Можно смотреть вверх и вниз.
При включении freelook отключается автоаим и стрельба идёт строго по перекрестию. За то теперь можно стрелять из окна куда раньше аим не видел противников
Мобильное управление
Не самая сильная сторона, доделывал в последнюю очередь по запросу друзей, но работает и даже можно пройти игру
Полноэкранный режим в мобильной версии
Кнопка FS включает fullscreen с блокировкой ориентации в горизонтальный режим и скрытием интерфейса браузера
Поддержка широких экранов
Рендеринг занимает всю доступную область экрана, включая widescreen-форматы
Проект можно попробовать здесь:
https://doom.kabloo.ru
Буду рад обратной связи и замечаниям 👍
PS: Позже выложу исходники в открытый доступ для всех желающих















