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

    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

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 85

      +13
      Нужно добавить видео и голосовую связь для более полного эффекта присутствия.
      А так же специальную кнопку: «Толкнуть друга локтем»
        +5
        Канал не резиновый, тут игра еле-еле идет, но идея хорошая
          0
          А какой поток данных? Интересно бы поподробнее услышать в чем тут проблема, 3D шутеры же справляются.
            0
            Поток данных совсем не большой, 1 байт должен пересылаться 60 раз в секунду, поэтому важна задержка в сети. Я не могу сейчас ответить как будет влиять видео чат, нужно написать тест.
              0
              3D-шутеры писались с изначальной поддержкой сети.
              NES изначально несетевой. И программа N раз в секунду опрашивает джойстики (прерываний нет) и его задержка должна быть маленькой.
          +3
          Теперь есть чем заняться вечером в пятницу:)
            0
            Хм, в Хроме и ИЕ пишет обновить флеш, хотя стоит последний, даже обновил для ИЕ специально. Такая печаль(
              +4
              Удостоверьтесь, пожайлуста, что он действительно обновился корректно, так как у всех работает корректно на 11 версии плеера
                0
                Да, вы правы, заработало, спасибо.
                0
                Тоже самое (хром), просит обновиться, хотя на сайте адоба указано что последняя =(
                  0
                  В хроме я это не победил, играю через ИЕ.
                    +1
                    проверте плз версию флеш плеера, точно 11?
                      0
                      Теперь и в Хроме заработало. Ничё не делал. Мистично =)
                        +2
                        Вы не делали, зато я делал, понизил версию до 10.2, потом буду разбираться в чем была проблема
                  +3
                  Ну вот и конец рабочего дня настал
                    +4
                    Это просто шикарная новость!
                      +3
                      Спасибо!
                      +1
                      Слишком уж тормозит :(
                        +2
                        К сожалению, все упирается в пинг, и зависит от расстояния между игроками. Как победить, пока не знаю :(
                        +5
                        круто) но добавьте пожалуйста поддержку локальной сети (выбор lan или internet), это делается очень просто, если не знаете как подскажу
                          +3
                          Спасибо, я знаю как это сделать, будет время добавлю :)
                          +3
                          Вот уж спасибо!!! Офигительная идея на мой взгляд) Не так давно скачал на Таб все ромы, что есть на рутреекере, гоняю эмуляторами, но тут принципиально новый уровень)) В контру поиграть вдвоём по сети, офигеть просто…
                            0
                            Давно уже есть эмуляторы для Sega/Dendy, с поддержкой многопользовательской игры по сети
                            +1
                            Рабочий день потерян.Спасибо!
                              0
                              За прокси сервером играть, как я понимаю, нельзя?
                                0
                                Если Adobe Cirrus не пускает, то нет (тестировать тут cc.rtmfp.net/)
                                +1
                                Если Adobe Cirrus не пускает, то нет (тестировать тут cc.rtmfp.net/)
                                  0
                                  А чем обоснован выбор 11й версии? Интересны технические подробности.
                                    +1
                                    Заметно лучше идет эмуляция, adobe в последнее время работает над alchemy, видимо, что то оптимизируют
                                    А вообще, я по просьбам уже понзил до 10.2
                                      +1
                                      Насколько мне известно — в 11 версии де-факто сломали поддержку Alchemy. Точнее начиная с 11.2. И, скорее всего, именно с этим связаны были проблемы некоторых игроков.
                                        0
                                        Нет, проблемы возникают если компилировать с опцией -swf-version=13, в этом случае не работает alchemy на 11.2, без этой опции все ок
                                        Adobe ничего не ломала, а наоборот предупредила заранее, что будет переходной момент, а потом старый alchemy будет вовсе отключен
                                          0
                                          Странно это «заранее», если Alchemy перестала работать в 11.2, но при этом в 11 работала. И после обновления у людей перестали некоторые флешки работать.
                                            +1
                                            -swf-version=13 — это значит «версия плеера 11», для 11.2 другая цифра, но апдейт убивает поддержку «задним числом»
                                      +2
                                      А где поддержка геймпадов??? Что за эмулятор NES без геймпада :-(
                                        0
                                        А, подсмотрел сам у себя. Joy2Key
                                          +1
                                          adobe добавит поддержку геймпадов в будущих версиях флеша
                                            +3
                                            Мы не можем ждать милостей от Адоба, взять их у него — наша задача :-) У меня для роботов уже давно используется самописная софтинка (C++) — обработчик нажатий аналогового джойстика (дискретного геймпада, аналогового руля, etc) Софтинка биндит сокет, т.е. является сервером. Флеш коннектится на сокет и взаимодействует с «сервером джойстика». Принимает нажатия, отправляет сигналы для вибрации (при попадании). Осталось фидбек добавить для нормальной обратной связи, вибрация не очень для этого подходит.

                                            Короче, всё в наших руках :-)
                                            +3
                                            Минус к этой фразе — это просто кощунство! Эмулятор NES без геймпада это как Ме без Пу.
                                              0
                                              Я тоже удивился. Без геймпада весь кайф теряется полностью. :(
                                                0
                                                мало того — по описанной мной схеме прекрасно обходится ограничение флеша на ловлю нажатий клавиш в полноэкранном режиме. так что штука мегаполезная. исходники не выкладываю, корявые они у меня, ещё не причёсывал :-)
                                              +1
                                              >Были мысли выложить его в open source…

                                              Были да сплыли? Или все еще впереди?
                                                0
                                                Были, но до сих пор не определелился
                                                  0
                                                  Да, это было бы шикарно, я считаю.

                                                  А еще шикарно было бы скачивать ромы; или скачать все одним архивом (хотя, и так все можно скачать с торрентов).

                                                  Хотя, конечно, решение за вами все-равно.
                                                0
                                                Да, собственно все ОК, но вот только звук репит, и это доставляет
                                                  0
                                                  Даешь теперь Snesbox!
                                                    +3
                                                    Вечер пятницы удастся на славу :)
                                                      +1
                                                      ну зачем вы так в рабочее время? :(
                                                        +1
                                                        Fullscreen?
                                                          +1
                                                          С фулскрином беда, во флеше в целях security в фулскрине работают только стрелки, пробел и таб
                                                          Почитать можно тут
                                                            0
                                                            Разве?
                                                            В танках работают и стрелки, и пробел и WASDZX с PgUp/PgDn.
                                                            В том числе в полноэкранном режиме под FP11.
                                                              0
                                                              Такого не может быть физически. Но я все же перепроверил на демке Tanki 2.0. Как и предпологалось, в фулскрине работают только стрелки и пробел :(
                                                                0
                                                                Гм… в 2.0 и правда не работает, в 1.0 — работает.
                                                                Адоб просто из кожи вон лезет для того, что бы убить флэш как платформу для чего-то серьёзного.
                                                                  0
                                                                  Так, давайте определимся, какой фулскрин вы иммете виду, фулскрин самого флеша или фулскрин браузера через F11?
                                                                    0
                                                                    Оба случая.
                                                                    Сейчас проверил в хроме и в standalone player.

                                                                    В standalone проверял так:
                                                                    1) Скачал fpdownload.macromedia.com/pub/flashplayer/updaters/11/flashplayer_11_sa_32bit.exe
                                                                    2) Запустил как

                                                                    flashplayer_11_sa_32bit.exe tankionline.com/AlternativaLoader.swf?config=c1.tankionline.com/config.xml&rserver=s.tankionline.com&lang=ru&v=5


                                                                    3) Нажал Ctrl-F для перехода в полноэкранный режим.
                                                                    4) Кнопки работают.

                                                                      0
                                                                      в standalone все кнопки работают в фускрине на всех флешках
                                                                      у меня изначально был вопрос, как вы в браузере заставили работать полноценно клавиатуру в фулскрине, у танков даже кнопки fullscreen нету?
                                                                      Этого не может быть никак, в браузере это закрыто в целях безопасности, читать тут.
                                                                        +1
                                                                        Тогда мы не поняли друг друга :)
                                                                        Отдельной кнопки у танков действительно нету.
                                                                        Я думаю, в браузере всех устроит и «фуллскрин средствами браузера».
                                                            +1
                                                              0
                                                              2560x1440 px.
                                                              0
                                                              Сетевой ArtMoney предусмотрен?
                                                                +2
                                                                Без кинескопа не вставляет.
                                                                  +1
                                                                  Попробуйте www.retrocopy.com/ — виртуальная 3D-комната, в которой можно разместить хоть телевизор с кинескопом, хоть аркадный игровой автомат. Встроенные эмуляторы прилагаются.
                                                                    0
                                                                    Интересно, поиграюсь на досуге. Спасибо.
                                                                  +1
                                                                  А читы действуют? До сих пор помню чит для контры на SEGA (up, up, down, down, A, up, up, down, down, B, up, up, down, down, C).
                                                                    +1
                                                                    Конечно, например, чтобы получить 30 жизней в Contra: UP, UP, DOWN, DOWN, LEFT, RIGHT, LEFT, RIGHT, B, A, START
                                                                    +1
                                                                    А с чего им не действовать? Если эмулируемый ром точно такой же, как в оригинальном картридже, то читы должны действовать.
                                                                    +2
                                                                    Совет: приделайте веб чат
                                                                      0
                                                                      Вы имеете в виду чат на двух игроков, или общий чат, как, например, на kongregate.com?
                                                                        0
                                                                        Можно и то и другое. Но хорошо бы сделать общий чат, чтобы искать желающих, а еще лучше по желанию пользователя поиск среди всех игроков. Заходишь в игру, ждешь к тебе подключается такой-же «ждущий» без ссылки.
                                                                      0
                                                                      Есть ли в планах выложить исходники или хотя бы реализовать встраивание в другие сайты? Я делаю сайт посвящённый NES (nesgames.asfdfdfd.com), в частности, пишу обзоры и хотелось бы иллюстрировать обзор игрой. В дальнейшем планирую развить во что-то вроде NES энциклопедии.
                                                                        0
                                                                        Встраивание уже было в первых версиях сайта, но было убрано за отсутствием практической пользы. Во-первых, практически никто не пользовался. Во-вторых, те кто пользовались, пытались сделать клон nesbox.com. Переубедите меня, и я верну фичу :)
                                                                        +2
                                                                        Отличный сайт! Вот только background какой-то гипнотический.
                                                                          0
                                                                          А можно сделать возможность соединения без ссылок, со случайными людьми из интернетов?
                                                                            +1
                                                                            forever alone :-)
                                                                            +1
                                                                            Сайт упал! Как к сессии готовиться то?
                                                                              0
                                                                              ага, разбираемся, спасибо
                                                                                0
                                                                                опять в дауне? :)
                                                                                  0
                                                                                  Да, проблемы у хостера, опять лежит firstvds.ru, остается только ждать :(
                                                                              0
                                                                              Интересно, почему Battle City на последнем месте в популярных? Личная неприязнь автора сайта?
                                                                                0
                                                                                Вы знаете, даже не задумывался об этом, просто так получилось. Скоро заработает счетчик популярности и все игры окажутся на своих местах.
                                                                                +1
                                                                                Автор, ты увеличил количество добра на планете :)
                                                                                  0
                                                                                  Приятно слышать.
                                                                                  0
                                                                                  Я извиняюсь, сайт временно в дауне или умер окончательно?
                                                                                    0
                                                                                    Алчные руки копирастов добрались до этого чудесного сайта?
                                                                                      0
                                                                                      Ага, потирают свои ручонки :)

                                                                                    Only users with full accounts can post comments. Log in, please.