Старая игра идёт в браузере не потому, что её переписали на JavaScript, а потому, что вместе с ней запускается эмулятор: DOSBox, собранный в WebAssembly. Он изображает процессор x86, звуковую карту и саму DOS, а игра остаётся тем же файлом начала девяностых. Устанавливать нечего — этот «компьютер» приезжает во вкладку парой мегабайт кода и живёт, пока вкладка открыта.
Начать проще всего с раздела ретро-игр: единственная кнопка, которую нужно нажать, называется «Играть в браузере».
Коротко
- Внутри страницы работает DOSBox, скомпилированный в WebAssembly (проект js-dos). Эмулятор считает всё в вашем браузере, на нашем сервере игра не крутится.
- Первый запуск тянет эмулятор (около 2 МБ) плюс архив игры — от 1 до 40 МБ. Размер написан на странице каждой игры, дальше файлы берутся из кеша.
- Клавиатура уходит в игру только после клика по чёрному экрану. Звук включается тоже после клика — это правило браузера.
- Сохранения пишутся в файловую систему эмулятора, которая живёт в памяти вкладки. Перезагрузили страницу — начинаете с начала уровня.
- Чёрный экран после нажатия кнопки лечится обновлением страницы: эмулятор иногда не поднимается с первого раза.
Что происходит после кнопки «Играть»
Порядок всегда один и тот же, и знание этого порядка экономит время, когда что-то пошло не так.
- Грузится ядро эмулятора. До нажатия кнопки его нет на странице совсем: тянуть два мегабайта wasm каждому, кто просто открыл текст, было бы невежливо. Поэтому кнопка на секунду становится неактивной.
- Скачивается архив игры. Это обычный zip с оригинальными файлами: исполняемый файл, ресурсы, конфиг. Ничего не распаковывается на диск — архив разворачивается в память вкладки.
- Эмулятор «включает компьютер». Появляется чёрный экран 4:3, внутри отрабатывает команда перехода в папку игры и запуск её exe-файла — ровно то, что вы набрали бы в DOS руками.
- Управление переходит игре. После клика по экрану нажатия клавиш перестают листать страницу и уходят в эмулятор.
Почему ничего не нужно устанавливать
DOSBox существует с 2002 года и распространяется по лицензии GPL. Обычно его ставят программой: он изображает x86-процессор, память, видеорежимы от CGA до VESA и звуковые карты вроде Sound Blaster и AdLib, и делает это так, что игре не нужна ни настоящая DOS, ни настоящее железо.
WebAssembly добавил к этому одну вещь: возможность взять тот же самый код на C++ и скомпилировать его в формат, который исполняет браузер. Проект js-dos именно это и делает — упаковывает ядра DOSBox и DOSBox-X в wasm и даёт им экран, клавиатуру и звук браузера.
Отсюда и все остальные свойства. Ставить нечего, потому что программа приходит как часть страницы. Прав администратора не нужно. Операционная система не важна: Windows, macOS, Linux, Android — код исполняет браузер, а не система.
Отсюда же и безопасность. Игра из 1993 года не получает доступа к вашим файлам: она видит только ту файловую систему, которую ей нарисовал эмулятор, и та живёт внутри вкладки. Аккаунт не нужен, потому что заводить его негде — считать некому, всё происходит на вашей стороне.
И отсюда же главное ограничение: всё считает процессор вашей вкладки. Тяжёлые вещи вроде Quake на слабой машине идут медленнее, чем платформер 1991 года, и это не лечится настройками страницы.
Сколько это весит и почему второй запуск быстрее
Считать нужно два числа. Ядро эмулятора — около двух мегабайт, оно одно на все игры. Архив игры — своё для каждой: Wolfenstein 3D укладывается в полтора мегабайта, DOOM весит около четырёх, а Quake — девять.
Точный вес всегда написан на странице игры, до нажатия кнопки. На мобильном интернете это стоит прочитать заранее.
Дальше работает кеш. Скачанные файлы браузер складывает в собственное хранилище (в коде плеера оно так и называется — js-dos-cache), и при следующем открытии страницы игра стартует почти мгновенно. Чистка данных сайта или режим инкогнито обнуляют этот кеш, и всё качается заново.
Из этого следует бытовое правило: первый запуск тяжёлой игры лучше делать там, где интернет не считают по мегабайтам. Второй и все следующие — уже безразличны к скорости сети, потому что сеть в них не участвует.
Почему после перезагрузки страницы сохранение пропадает?
Потому что файловая система эмулятора у нас разворачивается в память вкладки, а не в постоянное хранилище браузера. Мы проверили это по коду плеера: архив монтируется в корень, а сохранение в постоянное хранилище там не включается.
Практический вывод простой.
Сохранение внутри игры работает, пока вкладка открыта. После F5 игра собирается из архива заново, и старый сейв не подтянется.
Это касается и настроек, которые игра пишет в свой конфиг: громкость, чувствительность мыши, переназначенные клавиши. Пока вкладка жива — всё на месте, после перезагрузки возвращается заводское состояние.
Что с этим делать: проходить эпизод за один заход, не закрывать вкладку между сессиями и не нажимать F5 в момент, когда захотелось «просто обновить». Длинные вещи вроде Civilization в браузере честнее считать игрой на один вечер, а не кампанией на месяц. В свежих версиях js-dos для постоянных сохранений появилось отдельное хранилище (OPFS), но в той сборке, что стоит у нас, его нет — обещать сохранность прогресса мы не будем.
Пойдёт ли это на слабом ноутбуке или телефоне?
Пойдёт, но по-разному. Эмулятор считает такты процессора DOS-машины на вашем процессоре, и цена этого зависит от игры: двухмерный платформер требует смешных ресурсов, трёхмерный шутер 1996 года — заметных.
Что реально помогает, по убыванию:
- Закрыть лишние вкладки. Эмулятор делит процессор с ними, а не живёт отдельно.
- Включить полный экран. Кнопка «На весь экран» отдаёт картинке всю площадь, а браузеру — меньше работы по масштабированию.
- Выбрать игру по весу. Prince of Persia или Dune II идут там, где Quake уже спотыкается.
- Не держать открытыми две игры одновременно. Два эмулятора в двух вкладках — два потребителя процессора.
Телефон — отдельная история: там дело не в скорости, а в управлении. Как выглядит экранный пульт, какие жанры играются пальцем, а какие нет, разобрано в гайде про ретро-игры на телефоне.
Что обычно идёт не так
Чёрный экран, который так и не сменился картинкой. Симптом: кнопка нажата, экран появился, дальше ничего. Причина: ядро эмулятора иногда не поднимается с первого раза, особенно если страницу открыли и сразу нажали кнопку. Что делать: обновить страницу и нажать кнопку ещё раз — со второго захода игра стартует.
Клавиши листают страницу вместо игры. Симптом: стрелки прокручивают текст, пробел делает скачок вниз. Причина: фокус остался на странице. Что делать: кликнуть внутрь чёрного экрана — после этого ввод уходит в эмулятор.
Нет звука до первого клика. Симптом: картинка идёт, музыки нет. Причина: браузеры не дают странице включить звук, пока пользователь по ней не кликнул. Что делать: кликнуть по экрану игры; если звука нет и после этого, проверить, не выключен ли звук у самой вкладки.
Ни одна игра не запускается. Симптом: кнопка нажимается, но эмулятор не грузится ни в одной игре раздела. Причина: в сети или в браузере заблокирован WebAssembly — так настроены некоторые корпоративные и школьные сети и часть блокировщиков. Что делать: проверить в другом браузере или в другой сети; на нашей стороне это не чинится.
Игра идёт рывками на ноутбуке. Симптом: звук заикается, картинка дёргается. Причина: процессор вкладки занят другими вкладками или игра тяжелее машины. Что делать: закрыть лишние вкладки, включить полный экран, взять игру полегче.
Ощущение, что «сохранение сломалось». Симптом: сейв был, после перезагрузки страницы его нет. Причина: файловая система эмулятора живёт в памяти вкладки. Что делать: не перезагружать страницу посреди прохождения; выбирать игры, которые проходятся за один заход.
С чего начать
Если раздел открыт впервые, разумный маршрут такой: DOOM — чтобы проверить, что всё работает и клавиатура ушла в игру; Dune II — чтобы посмотреть на игру с мышью; дальше по вкусу. Не знаете, что выбрать, — рандомайзер игр решит за вас, а разбор классики по жанрам лежит в гайде во что из DOS играть сегодня. Почему всё это вообще можно запускать бесплатно и легально, объяснено отдельно — в материале про модель shareware.
Вопросы и ответы
Нужно что-то скачивать или ставить эмулятор?
Нет. Эмулятор — это код на странице, он загружается в момент нажатия кнопки и работает во вкладке. После закрытия вкладки на компьютере не остаётся ничего, кроме кеша браузера.
Почему первый запуск долгий, а второй мгновенный?
В первый раз браузер тянет сам эмулятор (около двух мегабайт) и архив игры — от одного до сорока мегабайт, размер написан на странице каждой игры. Дальше файлы лежат в хранилище браузера с именем js-dos-cache и берутся оттуда.
Сохранения переживут перезагрузку страницы?
В нашем плеере — нет. Файловая система эмулятора разворачивается в память вкладки, и после F5 игра собирается из архива заново. Сохраняйтесь внутри игры и проходите эпизод за один заход.
Это законно?
Да, потому что в разделе стоят шейрвер- и фривер-версии, которые издатели сами пустили в свободное распространение, плюс демоверсии. Взломанных копий платных игр нет, файлы берутся из программной библиотеки Internet Archive.
Игра не запускается вообще, кнопка нажимается впустую. Что это?
Чаще всего заблокирован WebAssembly: так настроены некоторые корпоративные и школьные сети и часть расширений-блокировщиков. Проверить просто — если ни одна игра в разделе не стартует, дело не в игре.