| Разработка и ромхакинг > Ромхакинг |
| Эмуляция коопа Zero Tolerance |
| (1/3) > >> |
| Segaman:
Вообщем я уже наверно год, как разобрал работу протокола и даже смог его воспроизвести на С++ для своего СДК под сегу. Тестил на консолях - работает, данные передаются, так что всё разобрано верно. :cool: Встал вопрос: Какой эмулятор взять для написания эмуляции протокола коопа? Просто я первым делом полез в Меднафен и сильно об этом пожалел. Я знаю что есть всякие ядра для ретроарчей и прочей лабуды - я в этом не разбираюсь. Короче как лучше всего подойти к разработке эмуляции, чтобы она была доступны как можно большему колличеству игроков? :) |
| Razor:
--- Цитата ---чтобы она была доступны как можно большему колличеству игроков? --- Конец цитаты --- А тут только два варианта из твоего поста и подходят. В качестве эмулятора для игры по сети популярны как раз Mednafen и RetroArch. |
| Беларус:
Segaman, из твоего коммента непонятно что за мультиплеер ты хочешь - локальный и/или через Интернет. Я уже задавал этот вопрос тебе несколько лет назад и ты не смог ответить :) Вот и пришло время сначала решить это. Если локальный, то есть хак для Дюны - расширили экран в два раза, или даже в четыре. Т.е. или в одном окне сплитскрин, или два одновременно запущенных эмулятора как-то соединить - да хоть через сетевой протокол Каиллеры. Т.е. понадобится ещё программа имитации сетевого подключения, т.к. второй эмулятор не хочет присоединяться на тот же локальный сервер. Вариантов море, можно разбирать все плюсы и минусы каждого. Из эмуляторов предложил бы BlastEm как одного из самых точных. Но пишут, что его код полное говно. |
| Segaman:
perfect_genius, по сети. Через интернеты короче :) |
| Mad:
Segaman, У Mednafen-а относительно небольшие системные требования, RetroArch же портирован на большое кол-во платформ, однако там один GUI требует больше чем весь Меднафен, эмулирующий Сегу. |
| Беларус:
Segaman, тогда есть только два варианта? Или отправлять только ввод игрока, или таки все данные прям как по этому кабелю. Там ведь постоянно отправляется целый массив данных? Координаты врагов, состояние дверей... Тут не только Каиллера не подходит, так ещё и сам эмулятор должен будет вставлять полученный массив прямо в память игры? Сколько работы... :) |
| Segaman:
perfect_genius, тут кастомное с нуля писать. сервер с нуля и клиенты внутри умулятора. в умуляторе сделаю симуляию чтения данных, а запись только когда от сервера придут. так шо не важно каилера не каилера, я их протоколы не буду юзать, они на такое не сгодятся :) |
| Беларус:
Всё же предлагаю ещё выложить всё, что выяснил. А то если снова всё загнётся, то есть шанс, что кто-нибудь что-нибудь сделает к 30-летию игры. |
| Ti_:
Doom 32X Resurrection тоже через этот кабель пашет. |
| Segaman:
--- Цитата: perfect_genius от 22 Январь 2023, 19:58:54 ---Всё же предлагаю ещё выложить всё, что выяснил. А то если снова всё загнётся, то есть шанс, что кто-нибудь что-нибудь сделает к 30-летию игры. --- Конец цитаты --- https://twitter.com/Segaman8/status/1417882799294619651?s=20&t=iWM2ORtLnTRd0IS2fwFr2w https://twitter.com/Segaman8/status/1418005906852388866?s=20&t=iWM2ORtLnTRd0IS2fwFr2w Добавлено позже: еще в 2021-ом сделал |
| Беларус:
Опять 25. Ты приводил уже эти твиты, я в ответ приводил вот это оттуда: --- Цитата ---I was able to transfer 4bits bymyself, but only 1 way and 1 nyble. Need to investigate more to be able to send data 2 ways. --- Конец цитаты --- Т.е. далее выяснять необязательно - неважно? А ещё не могу найти твои видео, где ты пытался разобраться в протоколе изучая исходники, но так и не смог. Удалил что ли? Добавлено позже: Понятно, у тебя есть ещё один канал и тоже про хакинг, видео на месте. И таки продолжил разбирать и смог, я смотрю :thumbup: Т.е. тебе надо или обновить твиты, или кидать ссылку лучше на свои эти видео :) |
| Segaman:
perfect_genius, мне лучше задокументировать. но еще лучше заэмулировать :) |
| Беларус:
Вдруг вспомнил очень важное и давно волнующее меня в этом мультиплеере - как игроки синхронизируются? Вот один игрок ходит по пустым коридорам, а второй набрал целую толпу врагов и теперь у него частота кадров упала, всё тормозит. Первый игрок тоже начнёт подтормаживать, ожидая данные от второго? Есть какие-то мысли, раз знаешь код игры? |
| Segaman:
perfect_genius, * Расчет на то, что ромы одинаковые * Все этажи эпизода хранятся в ОЗУ * По кабелю передаются только события (выстрелы, передвижения, урон, подбор предметов и тд) * Код у игры максимально простой, чтобы неперегружать рендер кадровНасчет последнего, я отключал рендер фреймов и по ощущения было будто поставить в эмуле фреймскип на 5 или 6. Настолько игровое двигло мало ресов жрёт, что без рендера кадров выдает столько действий за секунду. Так что мультиплеер для игры особо ненагружет всё хозяйство, самое тяжелое для игры это фреймы. :) Добавлено позже: Добавлю, что если запустить бейонд в коопе с оригиналом, сначала все заработает нормально, а потом резко сдохнет из-за разницы в игровом процессе. А вот если андеграунд запускать в коопе с оригиналом, то тут все отлично заработает за тем лишь исключением, что у второго игрока будут карты из другой игры. Если у первого игрока заспавнится враг, то он заспавнится и у второго там же, но вот наоборот это уже не сработает. Вообщем расчет на то, что стейджи у обоих игроков идентичные, иначе ломается и\или глитчует |
| Беларус:
Сложновато всё это понять не видя самому. Короче, опрос кнопок не привязан к отрисовке кадров, поэтому строгой синхронизации не потребуется? Т.е. если у одного частота кадров нормальная, то его игра не будет спамить второго "тормозящего" игрока сообщениями о нажатой кнопкой выстрела? Будет отправлять это сообщение строго, условно, 20 раз в секунду несмотря на тормоза или их отсутствие. Ещё мне было интересно увидеть, что сетевой код дублируется - для нормальной игры оптимизация через относительность всех адресов от значения в одном регистре. А вторая копия для времени обратного прохода луча (не разбираюсь, забыл как называется - VBlank же?), и там тот же код уже без такой оптимизации. |
| OFFSPRINGER3:
То шо там, будет эмуляция? :) Просто уже лет 10-15 об этом периодически инфа проскакивает и все никак |
| Беларус:
Если Segaman не совершит чудо, то будет от меня, т.к. я давно и упорно делаю инструмент ковыряния игр Сеги (мне надо для реверса UMK3, ZT просто по пути). Синхронизация для меня выглядит проблемой и мы с ним друг-друга не поняли, похоже. Если у одного тормозит с кучей врагов на экране, то что происходит у другого, когда у него пустота вокруг? Один игрок становится хостом. Это тоже интересно само по себе - как? Ковыряя код не смог понять. Вроде как при подключении игра просто проверяет занят ли флаг ожидания начала игры. Если нет, то ставит сам. Если уже стоит, то он второй. Хост обрабатывает движение врагов и их координаты отправляет второму? Или оба отправляют друг-другу координаты тех врагов, которых "залочили" на себе? Segaman мог всё это простенько описать хоть тут, хоть в своём видео. Да что-то жмотит :) |
| Segaman:
--- Цитата: perfect_genius от 01 Февраль 2023, 18:37:55 ---Сложновато всё это понять не видя самому. Короче, опрос кнопок не привязан к отрисовке кадров, поэтому строгой синхронизации не потребуется? Т.е. если у одного частота кадров нормальная, то его игра не будет спамить второго "тормозящего" игрока сообщениями о нажатой кнопкой выстрела? Будет отправлять это сообщение строго, условно, 20 раз в секунду несмотря на тормоза или их отсутствие. Ещё мне было интересно увидеть, что сетевой код дублируется - для нормальной игры оптимизация через относительность всех адресов от значения в одном регистре. А вторая копия для времени обратного прохода луча (не разбираюсь, забыл как называется - VBlank же?), и там тот же код уже без такой оптимизации. --- Конец цитаты --- Если второй игрок тупит, то и первый будет тупить. Когад десинх происходит так вообще опа пролипают на время, а потом пишет дисконнектед. Передача данных не может быть, если собеседник не ответил подтверждением получения 4 бит данных, и если собеседник будет долго отвечать, то вся игра пролипнет. |
| Беларус:
Спасибо, теперь хоть немного понятнее :thumbup: Т.е. если у "быстрого" игрока на экране один враг "тормозного" игрока, то этот враг будет тормозным, т.к. его координаты приходят нечасто, т.к. у посылаемого долгий рендер кадров. Мне ещё по коду показалось, что сигнал одного игрока вызывает прерывание у другого, т.е. насильно заставляет его передать все данные, чем бы он там ни занимался (обработка позиций, рендер кадра, звук...). Думаю, всё же для начала надо соединить два окна эмулятора на одном ПК. Можно попробовать третьей программой лезть прямо в память игр и переносить данные напрямую, по идее. |
| AuAurora:
какие новости? |
| Навигация |
| Главная страница сообщений |
| Следующая страница |