Pull to refresh

Сетевая игра в NES (Dendy) реализованная на Flash P2P

Reading time2 min
Views28K
image

С момента запуска nesbox.com прошло уже более полутора лет, все это время меня не покидала идея сделать игру для двоих через интернет. Если интересно, как мы пришли к рабочему варианту, добро пожаловать под кат.

Начну с того, как работает наш эмулятор. Для комфортной игры он должен отрабатывать ~50-60 кадров в секунду. На каждый кадр мы передаем состояние обоих джойстиков, в виде 2 байт, в котором установленный бит отвечает за одну из кнопок джойстика, а на выходе получаем заполненный экранный буфер 256x240, и звуковой ряд размером 44100/60~=735 семплов.

image

Как видно, интерфейс простейший, но чтобы заставить все это работать по сети, мы должны отправить состояние джойстика первого игрока второму игроку, получить его состояние джойстика, и после этого запустить генерацию кадра экрана со звуком. И это должно происходить 50-60 раз в секунду.

Первым прототипом была схема с примитивным С++ сервером, который получал через Flash Sockets данные о джойстиках, и пересылал их обоим клиентам. Прототип был вполне рабочим, но играть по сети могли пользователи которые находились вблизи сервера nesbox.com (ping ~ 60ms). Были мысли выложить его в open source, чтобы люди сами его собирали и запускали на своих серверах в непосредственной близости. Но тут Adobe выпускает RTMFP протокол и технологию Cirrus, которая решает все наши проблемы, и теперь мы можем подключить оба эмулятора через P2P, и пропадает проблема с пингом. По крайней мере, люди в пределах одного города могут комфортно играть вдвоём.

image

Начать работу с Flash P2P элементарно, весь процесс уже описывался на хабре: Adobe Flash Player и передача потоковых данных без участия сервера, повторяться не будем. Общий смысл такой, мы подключаемся к Cirrus серверу, получаем 256-битный id, отсылаем их друг другу. Все, теперь можно слать данные peer-to-peer, что и реализовано в нашем эмуляторе.

Чтобы опробовать данную технологию и поиграть вдвоем в интренете предлагаю выбрать один из 16000 ромов на сайте nesbox.com и запустить эмуляцию. Далеко не все ромы рабочие, поэтому выбирайте зеленые с тегом verified.

image

Выбираем two players via internet.

image

Копируем полученный урл в буфер обмена и отсылаем второму игроку. Если все в порядке с конфигурациями ваших сетей, игра начнется через несколько секунд, если нет, соединение можно протестировать тут http://cc.rtmfp.net.

Моя мечта сбылась (и не только моя, очень много людей просили об этом), теперь можно играть в браузере в игрушки денди по сети с другом!

Ниже приведу несколько ссылок на популярные игры для двух игроков. На все ваши вопросы и пожелания отвечу в комментариях.

Battle City
image


Battletoads & Double Dragon — The Ultimate Team
image


Contra
image


Chip 'n Dale Rescue Rangers
image
Tags:
Hubs:
+142
Comments85

Articles

Change theme settings