Не­дав­но игро­вое сооб­щес­тво взор­вала новость о том, что GTA Vice City уда­лось запус­тить пря­мо в бра­узе­ре. Я взял интервью у сто­ящих за этим людей. Они поведа­ли мне неверо­ятную исто­рию про­екта DOS.Zone, который стре­митель­но взле­тел в пос­ледние годы на чис­том энту­зиаз­ме, став гло­баль­ным явле­нием.

Я погово­рил с его осно­вате­лем Алек­сан­дром Гурь­яно­вым (@caiiiycuk) и глав­ным еван­гелис­том про­екта Никитой Аксе­новым (он же Carter54), но ко­ман­да про­екта нам­ного боль­ше.

Все началось с люб­ви к Transport Tycoon Deluxe, а точ­нее, к его сво­бод­ной реали­зации OpenTTD. Алек­сандр в качес­тве экспе­римен­та захотел запус­тить игру в бра­узе­ре.

Сегодня OpenTTD в вебе работает идеально
Се­год­ня OpenTTD в вебе работа­ет иде­аль­но

Код был написан на C++ и иде­аль­но под­ходил для пор­тирова­ния. Но как перенес­ти компь­ютер­ную игру в бра­узер?

В 2010 году на сце­ну вышел ком­пилятор Emscripten. Он задумы­вал­ся как замена GCC. В иде­аль­ном слу­чае ты прос­то меня­ешь коман­ду gcc на emcc — и про­ект собира­ется под веб. С тех пор тех­нология прош­ла три эта­па: пер­вые вер­сии генери­рова­ли обыч­ный JavaScript — это работа­ло, но край­не мед­ленно. Затем появил­ся asm.js — осо­бая запись JavaScript, которую бра­узе­ры мог­ли опти­мизи­ровать. Ста­ло тер­пимо. А сегод­ня WebAssembly дает прак­тичес­ки натив­ную про­изво­дитель­ность.

info

WebAssembly (Wasm) — это низ­коуров­невый бинар­ный фор­мат кода и сре­да выпол­нения, пред­назна­чен­ные для запус­ка прог­рамм в бра­узе­ре и вне его с поч­ти натив­ной про­изво­дитель­ностью. Он раз­работан как безопас­ное перено­симое допол­нение к JavaScript.

Ком­пилятор соз­дал Алон Заки — соав­тор самого стан­дарта WebAssembly, сот­рудник Google. В 2011-м Заки про­демонс­три­ровал воз­можнос­ти ком­пилято­ра, пор­тировав Doom в бра­узер. Emscripten реали­зует спе­цифи­кацию POSIX, под­держи­вает OpenGL, SDL, OpenAL, pthread. Есть под­про­ект Ports, где популяр­ные биб­лиоте­ки под­клю­чают­ся одной коман­дой.

Та­ким обра­зом, нуж­ный инс­тру­мент был най­ден, и в 2012 году OpenTTD был пор­тирован в веб. Сле­дом полете­ли в бра­узер OpenDune и OpenXcom. Пор­тирова­ние игр еще не было про­фес­сией: парал­лель­но Алек­сандр работал в «Яндексе», но пос­тепен­но ста­новил­ся про­фес­сиона­лом в пор­тирова­нии игр. И однажды его ответ на Stack Overflow замети­ли рек­рутеры GamePix — ком­пании, которая как раз занима­лась пор­тирова­нием игр в веб.

Так хоб­би прев­ратилось в работу. Сей­час Алек­сандр руково­дит у них отде­лом пор­тирова­ния. За эти годы коман­да перенес­ла в бра­узер боль­ше сот­ни игр и движ­ков. Пер­вым про­ектом на новом мес­те ста­ла небезыз­вес­тная Cut the Rope.

 

Как появился js-dos

На пор­тирова­ние одно­го про­екта может уйти до полуго­да. По сло­вам Алек­сан­дра, ему «хотелось най­ти уни­вер­саль­ный под­ход, поз­воля­ющий сра­зу запус­кать сот­ни ста­рых игр». Решение было най­дено — кросс‑плат­формен­ный эму­лятор DOSBox! К 2014 году на Internet Archive появи­лась воз­можность запус­кать DOS-игры в бра­узе­ре. За этим сто­ял Борис Дже­неро (Boris Gjenero), пор­тировав­ший DOSBox через уже извес­тный нам Emscripten.

На Archive.org хранятся не только игры, но и обычные программы
На Archive.org хра­нят­ся не толь­ко игры, но и обыч­ные прог­раммы

Но воз­никла новая проб­лема. Под каж­дую игру нуж­но было под­бирать кон­фигура­цию DOSBox, что­бы она пра­виль­но работа­ла. Алек­сандр решил это авто­мати­зиро­вать. Взяв за осно­ву em-dosbox, он допилил про­изво­дитель­ность, что уско­рило эму­ляцию на порядок, и написал скрипт для упа­ков­ки игр в готовые пакеты. Так появи­лась биб­лиоте­ка js-dos — инс­тру­мент, поз­воля­ющий запус­тить любую игру для DOS в бра­узе­ре парой строк кода.

Ус­тро­ена она пос­лой­но. В осно­ве — эму­лято­ры, отдель­ный npm-пакет с дву­мя бэкен­дами: DOSBox и DOSBox-X. Оба могут работать в бра­узе­ре — как в основном потоке, так и в Web Worker, а так­же в Node.js. DOSBox-X — рас­ширен­ная вер­сия, спо­соб­ная запус­кать опе­раци­онные сис­темы вплоть до Windows 98. Алек­сандр стал пер­вым, кто пор­тировал DOSBox-X в бра­узер.

По­верх эму­лято­ров — сам js-dos: пле­ер с UI, муль­тип­леером и облачны­ми сох­ранени­ями. Для под­готов­ки игр есть Game Studio — веб‑инс­тру­мент, в котором собира­ется архив с фай­лами игры и кон­фигура­цией DOSBox. Архив сов­местим с обыч­ным DOSBox и работа­ет как в js-dos, так и за его пре­дела­ми.

От­дель­но сто­ит упо­мянуть Sockdrive — тех­нологию заг­рузки обра­за дис­ка по сек­торам. Вмес­то ска­чива­ния мно­гоги­габай­тно­го обра­за Windows 95 целиком под­гру­жают­ся толь­ко те фраг­менты, которые нуж­ны пря­мо сей­час.

 

Рождение DOS.Zone

Пор­тал DOS.Zone появил­ся в 2019 году — «как рек­ламная вит­рина, наг­лядно демонс­три­рующая воз­можнос­ти js-dos». Но вит­рина зажила сво­ей жизнью. Люди ста­ли при­ходить не ради биб­лиоте­ки, а ради игр. DOS.Zone оброс сооб­щес­твом и прев­ратил­ся в пол­ноцен­ный пор­тал — с катало­гом, облачны­ми сох­ранени­ями и плат­ной под­пиской. Ключ под­писки — пять сим­волов, подоз­ритель­но напоми­нает коды уров­ней из ста­рых игр.

Дол­гое вре­мя DOS.Zone был про­ектом одно­го челове­ка. Алек­сандр Гурь­янов писал код, готовил игры, чинил баги. А потом появил­ся Никита Аксе­нов.

Так портал DOS.Zone выглядит сегодня
Так пор­тал DOS.Zone выг­лядит сегод­ня

Ни­кита пишет про бра­узер­ные игры боль­ше вось­ми лет, выбирая самые необыч­ные темы. Один из пер­вых пос­тов — о том, как поиг­рать в PlayStation 1 в бра­узе­ре, — стал неверо­ятно популяр­ным. Даль­ше он писал про бра­узер­ный Half-Life через Xash3D, Doom 3, Serious Sam и пор­ты дру­гих куль­товых игр.

Од­нажды Никита нат­кнул­ся на DOS.Zone. Уви­дел, что на сай­те эму­лиру­ется Windows 95 пря­мо в бра­узе­ре. «Это прос­то взор­вало мне тог­да голову», — вспо­мина­ет он. Нашел кон­такт Алек­сан­дра, написал. Сло­во за сло­во — спро­сил, мож­но ли запус­тить Age of Empires в бра­узе­ре (она же работа­ла на Windows 95). Поп­робова­ли. Получи­лось!

С это­го момен­та началось сот­рудни­чес­тво. Кар­тер стал осва­ивать Game Studio и добав­лять игры в каталог. Про­цесс зависит от плат­формы: прос­тую DOS-игру мож­но под­готовить за пять минут, но Windows 3.1/95/98 — это дни воз­ни с обра­зами, драй­верами и ста­рыми вер­сиями DirectX. Для «Кня­зя: Леген­ды Лес­ной стра­ны» приш­лось разоб­рать ресур­сы игры и пра­вить их в Hex-редак­торе.

Ког­да Никита при­шел в про­ект, на DOS.Zone было око­ло тысячи игр. Сей­час — боль­ше 3500, и при­мер­но 70% катало­га — его работа. Но Кар­тер — не толь­ко катало­гиза­тор. Он стал, по собс­твен­ному выраже­нию, «отде­лом про­паган­ды». Сна­чала «Пикабу», потом Telegram-канал @gamebase54: 15 тысяч под­писчи­ков, ни копей­ки на рек­ламу, толь­ко живые люди.

Ка­нал стал пер­воис­точни­ком новос­тей про­екта. Помимо это­го — связь с игро­выми СМИ («Навига­тор игро­вого мира», 3DNews, Gazeta.ru), поез­дки по кон­ферен­циям и выс­тавкам, бар­терные догово­рен­ности с дру­гими канала­ми. Как он сам говорит: «Саша — глав­ный раз­работ­чик и осно­ватель. А меня прос­то видят».

По­ворот­ным момен­том стал запуск Heroes of Might and Magic III в бра­узе­ре 20 декаб­ря 2024 года. Новость раз­летелась: Lenta.ru, Gazeta.ru, федераль­ные СМИ. Для про­екта, который сущес­тво­вал в нише энту­зиас­тов, это был про­рыв. С тех пор круп­ные релизы ста­биль­но попада­ют в новос­ти — GTA Vice City, нап­ример, за нес­коль­ко часов пос­ле пос­та ока­залась бук­валь­но во всех игро­вых каналах.

 

Как устроено портирование

На DOS.Zone исполь­зуют два прин­ципи­аль­но раз­ных спо­соба запус­ка игр.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии