В прошлом я пытался повторить по шагам рендеринг как в doom, а сегодня задался вопросом: что если и мне попытаться сделать свой эксперимент по портированию Doom в браузер? Тем более в век вайбкодинга экспериментировать и проверять гипотезы стало намного дешевле по времени.
Как портировать старую программу в браузер? Программа была написана на языке X, запускалась в операционной системе Y, которая работала на железе (или хотя бы на процессоре) Z. Получается, концептуально (или на high-level) вариантов не так много.
Первый вариант: переписываем все с C на другой язык, то есть на JavaScript. Вместо API операционной системы для работы с графикой, звуком и клавиатурой используем браузерные API: Canvas API, Audio API, DOM API и прочие. К сожалению, переписывать все вручную дорого.
Первый порт Doom в браузер произошёл ещё в 2011 году силами компании Mozilla. Все благодаря проекту Emscripten, который в то время позволял компилировать код, написанный на C, в JavaScript. Отсюда получаем второй способ портирования. К сожалению, сейчас игру в сети не найти: порт после публикации удалили, говорят, возникли сомнения в соблюдении лицензии на игровые ресурсы.
Третий способ это скомпилировать исходники программы в WebAssembly код; тем более современная версия компилятора Emscripten, как раз этим и занимается. Кстати, существуют и другие примеры компиляции в WebAssembly. Здесь хочет показать проект wasm-fizzbuzz, где автор делится своими тонкостями портирования оригинального Doom.
Четвертый способ, и одновременно с этим пятый, это сделать эмуляцию или операционной системы, на которой запускается программа, или платформы и запустить оригинал программы на них, возможно с небольшими дополнениями. Кажется сложно? Но..
В своем эксперименте я