Автор Тема: Эмуляция коопа Zero Tolerance  (Прочитано 2423 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн Segaman

  • Пользователь
  • Сообщений: 3240
  • Пол: Мужской
  • Blast Processing!
    • Youtube
    • Просмотр профиля
Эмуляция коопа Zero Tolerance
« : 22 Январь 2023, 12:43:16 »
Вообщем я уже наверно год, как разобрал работу протокола и даже смог его воспроизвести на С++ для своего СДК под сегу.
Тестил на консолях - работает, данные передаются, так что всё разобрано верно.  :cool:

Встал вопрос: Какой эмулятор взять для написания эмуляции протокола коопа?

Просто я первым делом полез в Меднафен и сильно об этом пожалел.
Я знаю что есть всякие ядра для ретроарчей и прочей лабуды - я в этом не разбираюсь.

Короче как лучше всего подойти к разработке эмуляции, чтобы она была доступны как можно большему колличеству игроков?  :)
« Последнее редактирование: 22 Январь 2023, 12:55:39 от Segaman »

Онлайн Razor

  • Пользователь
  • Сообщений: 1785
  • Пол: Мужской
  • Gotta Go Fast!
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Эмуляция коопа Zero Tolerance
« Ответ #1 : 22 Январь 2023, 13:12:13 »
Цитата
чтобы она была доступны как можно большему колличеству игроков?
А тут только два варианта из твоего поста и подходят. В качестве эмулятора для игры по сети популярны как раз Mednafen и RetroArch.

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1144
    • ВКонтакте
    • Steam
    • Просмотр профиля
Эмуляция коопа Zero Tolerance
« Ответ #2 : 22 Январь 2023, 13:19:02 »
Segaman, из твоего коммента непонятно что за мультиплеер ты хочешь - локальный и/или через Интернет. Я уже задавал этот вопрос тебе несколько лет назад и ты не смог ответить :)
Вот и пришло время сначала решить это.

Если локальный, то есть хак для Дюны - расширили экран в два раза, или даже в четыре. Т.е. или в одном окне сплитскрин, или два одновременно запущенных эмулятора как-то соединить - да хоть через сетевой протокол Каиллеры. Т.е. понадобится ещё программа имитации сетевого подключения, т.к. второй эмулятор не хочет присоединяться на тот же локальный сервер.
Вариантов море, можно разбирать все плюсы и минусы каждого.

Из эмуляторов предложил бы BlastEm как одного из самых точных. Но пишут, что его код полное говно.

Оффлайн Segaman

  • Пользователь
  • Сообщений: 3240
  • Пол: Мужской
  • Blast Processing!
    • Youtube
    • Просмотр профиля
Эмуляция коопа Zero Tolerance
« Ответ #3 : 22 Январь 2023, 13:35:03 »
perfect_genius, по сети. Через интернеты короче :)

Онлайн Mad

  • Пользователь
  • Сообщений: 7913
  • Пол: Мужской
    • Просмотр профиля
Эмуляция коопа Zero Tolerance
« Ответ #4 : 22 Январь 2023, 14:40:32 »
Segaman, У Mednafen-а относительно небольшие системные требования, RetroArch же портирован на большое кол-во платформ, однако там один GUI требует больше чем весь Меднафен, эмулирующий Сегу.

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1144
    • ВКонтакте
    • Steam
    • Просмотр профиля
Эмуляция коопа Zero Tolerance
« Ответ #5 : 22 Январь 2023, 15:34:42 »
Segaman, тогда есть только два варианта? Или отправлять только ввод игрока, или таки все данные прям как по этому кабелю. Там ведь постоянно отправляется целый массив данных? Координаты врагов, состояние дверей...
Тут не только Каиллера не подходит, так ещё и сам эмулятор должен будет вставлять полученный массив прямо в память игры? Сколько работы... :)

Оффлайн Segaman

  • Пользователь
  • Сообщений: 3240
  • Пол: Мужской
  • Blast Processing!
    • Youtube
    • Просмотр профиля
Re: Эмуляция коопа Zero Tolerance
« Ответ #6 : 22 Январь 2023, 19:56:35 »
perfect_genius, тут кастомное с нуля писать.
сервер с нуля и клиенты внутри умулятора.
в умуляторе сделаю симуляию чтения данных, а запись только когда от сервера придут.
так шо не важно каилера не каилера, я их протоколы не буду юзать, они на такое не сгодятся :)

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1144
    • ВКонтакте
    • Steam
    • Просмотр профиля
Эмуляция коопа Zero Tolerance
« Ответ #7 : 22 Январь 2023, 19:58:54 »
Всё же предлагаю ещё выложить всё, что выяснил. А то если снова всё загнётся, то есть шанс, что кто-нибудь что-нибудь сделает к 30-летию игры.

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Эмуляция коопа Zero Tolerance
« Ответ #8 : 22 Январь 2023, 20:16:11 »
Doom 32X Resurrection тоже через этот кабель пашет.

Оффлайн Segaman

  • Пользователь
  • Сообщений: 3240
  • Пол: Мужской
  • Blast Processing!
    • Youtube
    • Просмотр профиля
Эмуляция коопа Zero Tolerance
« Ответ #9 : 24 Январь 2023, 11:00:58 »
Всё же предлагаю ещё выложить всё, что выяснил. А то если снова всё загнётся, то есть шанс, что кто-нибудь что-нибудь сделает к 30-летию игры.
https://twitter.com/Segaman8/status/1417882799294619651?s=20&t=iWM2ORtLnTRd0IS2fwFr2w
https://twitter.com/Segaman8/status/1418005906852388866?s=20&t=iWM2ORtLnTRd0IS2fwFr2w

Добавлено позже:
еще в 2021-ом сделал

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1144
    • ВКонтакте
    • Steam
    • Просмотр профиля
Эмуляция коопа Zero Tolerance
« Ответ #10 : 24 Январь 2023, 13:52:14 »
Опять 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:
Т.е. тебе надо или обновить твиты, или кидать ссылку лучше на свои эти видео :)
« Последнее редактирование: 25 Январь 2023, 18:43:26 от paul_met »

Оффлайн Segaman

  • Пользователь
  • Сообщений: 3240
  • Пол: Мужской
  • Blast Processing!
    • Youtube
    • Просмотр профиля
Эмуляция коопа Zero Tolerance
« Ответ #11 : 26 Январь 2023, 10:50:19 »
perfect_genius, мне лучше задокументировать.
но еще лучше заэмулировать :)

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1144
    • ВКонтакте
    • Steam
    • Просмотр профиля
Эмуляция коопа Zero Tolerance
« Ответ #12 : 31 Январь 2023, 15:10:26 »
Вдруг вспомнил очень важное и давно волнующее меня в этом мультиплеере - как игроки синхронизируются?
Вот один игрок ходит по пустым коридорам, а второй набрал целую толпу врагов и теперь у него частота кадров упала, всё тормозит. Первый игрок тоже начнёт подтормаживать, ожидая данные от второго?
Есть какие-то мысли, раз знаешь код игры?

Оффлайн Segaman

  • Пользователь
  • Сообщений: 3240
  • Пол: Мужской
  • Blast Processing!
    • Youtube
    • Просмотр профиля
Эмуляция коопа Zero Tolerance
« Ответ #13 : 01 Февраль 2023, 18:10:00 »
perfect_genius,
  • Расчет на то, что ромы одинаковые
  • Все этажи эпизода хранятся в ОЗУ
  • По кабелю передаются только события (выстрелы, передвижения, урон, подбор предметов и тд)
  • Код у игры максимально простой, чтобы неперегружать рендер кадров
Насчет последнего, я отключал рендер фреймов и по ощущения было будто поставить в эмуле фреймскип на 5 или 6.
Настолько игровое двигло мало ресов жрёт, что без рендера кадров выдает столько действий за секунду.
Так что мультиплеер для игры особо ненагружет всё хозяйство, самое тяжелое для игры это фреймы.  :)

Добавлено позже:
Добавлю, что если запустить бейонд в коопе с оригиналом, сначала все заработает нормально, а потом резко сдохнет из-за разницы в игровом процессе.
А вот если андеграунд запускать в коопе с оригиналом, то тут все отлично заработает за тем лишь исключением, что у второго игрока будут карты из другой игры.
Если у первого игрока заспавнится враг, то он заспавнится и у второго там же, но вот наоборот это уже не сработает.
Вообщем расчет на то, что стейджи у обоих игроков идентичные, иначе ломается и\или глитчует

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1144
    • ВКонтакте
    • Steam
    • Просмотр профиля
Эмуляция коопа Zero Tolerance
« Ответ #14 : 01 Февраль 2023, 18:37:55 »
Сложновато всё это понять не видя самому. Короче, опрос кнопок не привязан к отрисовке кадров, поэтому строгой синхронизации не потребуется?
Т.е. если у одного частота кадров нормальная, то его игра не будет спамить второго "тормозящего" игрока сообщениями о нажатой кнопкой выстрела?
Будет отправлять это сообщение строго, условно, 20 раз в секунду несмотря на тормоза или их отсутствие.

Ещё мне было интересно увидеть, что сетевой код дублируется - для нормальной игры оптимизация через относительность всех адресов от значения в одном регистре. А вторая копия для времени обратного прохода луча (не разбираюсь, забыл как называется - VBlank же?), и там тот же код уже без такой оптимизации.

Оффлайн OFFSPRINGER3

  • Пользователь
  • Сообщений: 86
  • 1312
    • Просмотр профиля
Эмуляция коопа Zero Tolerance
« Ответ #15 : 04 Февраль 2023, 23:34:59 »
То шо там, будет эмуляция?  :) Просто уже лет 10-15 об этом периодически инфа проскакивает и все никак

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1144
    • ВКонтакте
    • Steam
    • Просмотр профиля
Эмуляция коопа Zero Tolerance
« Ответ #16 : 05 Февраль 2023, 02:11:21 »
Если Segaman не совершит чудо, то будет от меня, т.к. я давно и упорно делаю инструмент ковыряния игр Сеги (мне надо для реверса UMK3, ZT просто по пути).
Синхронизация для меня выглядит проблемой и мы с ним друг-друга не поняли, похоже.
Если у одного тормозит с кучей врагов на экране, то что происходит у другого, когда у него пустота вокруг?
Один игрок становится хостом. Это тоже интересно само по себе - как? Ковыряя код не смог понять. Вроде как при подключении игра просто проверяет занят ли флаг ожидания начала игры. Если нет, то ставит сам. Если уже стоит, то он второй. Хост обрабатывает движение врагов и их координаты отправляет второму? Или оба отправляют друг-другу координаты тех врагов, которых "залочили" на себе?
Segaman мог всё это простенько описать хоть тут, хоть в своём видео. Да что-то жмотит  :)

Оффлайн Segaman

  • Пользователь
  • Сообщений: 3240
  • Пол: Мужской
  • Blast Processing!
    • Youtube
    • Просмотр профиля
Эмуляция коопа Zero Tolerance
« Ответ #17 : 05 Февраль 2023, 19:11:24 »
Сложновато всё это понять не видя самому. Короче, опрос кнопок не привязан к отрисовке кадров, поэтому строгой синхронизации не потребуется?
Т.е. если у одного частота кадров нормальная, то его игра не будет спамить второго "тормозящего" игрока сообщениями о нажатой кнопкой выстрела?
Будет отправлять это сообщение строго, условно, 20 раз в секунду несмотря на тормоза или их отсутствие.

Ещё мне было интересно увидеть, что сетевой код дублируется - для нормальной игры оптимизация через относительность всех адресов от значения в одном регистре. А вторая копия для времени обратного прохода луча (не разбираюсь, забыл как называется - VBlank же?), и там тот же код уже без такой оптимизации.
Если второй игрок тупит, то и первый будет тупить.
Когад десинх происходит так вообще опа пролипают на время, а потом пишет дисконнектед.
Передача данных не может быть, если собеседник не ответил подтверждением получения 4 бит данных, и если собеседник будет долго отвечать, то вся игра пролипнет.

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1144
    • ВКонтакте
    • Steam
    • Просмотр профиля
Эмуляция коопа Zero Tolerance
« Ответ #18 : 05 Февраль 2023, 20:36:57 »
Спасибо, теперь хоть немного понятнее :thumbup:
Т.е. если у "быстрого" игрока на экране один враг "тормозного" игрока, то этот враг будет тормозным, т.к. его координаты приходят нечасто, т.к. у посылаемого долгий рендер кадров.
Мне ещё по коду показалось, что сигнал одного игрока вызывает прерывание у другого, т.е. насильно заставляет его передать все данные, чем бы он там ни занимался (обработка позиций, рендер кадра, звук...).

Думаю, всё же для начала надо соединить два окна эмулятора на одном ПК. Можно попробовать третьей программой лезть прямо в память игр и переносить данные напрямую, по идее.

Оффлайн AuAurora

  • Пользователь
  • Сообщений: 1584
  • Мур
    • Youtube
    • Просмотр профиля
Эмуляция коопа Zero Tolerance
« Ответ #19 : 18 Март 2023, 18:56:57 »
какие новости?

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1144
    • ВКонтакте
    • Steam
    • Просмотр профиля
Эмуляция коопа Zero Tolerance
« Ответ #20 : 18 Март 2023, 21:32:07 »
Как обычно уж - всё умерло :lol:
А у меня прогресс в разработке инструментария никогда не останавливается. Сейчас моя тулза вот-вот начнёт показывать графику. С помощью этого я "нарисую" дерево кода игры и начну изучать сетевую часть. Правда, одновременно с другими играми, так что не быстро.

Оффлайн StRyK

  • Пользователь
  • Сообщений: 538
    • Steam
    • Youtube
    • Просмотр профиля
Эмуляция коопа Zero Tolerance
« Ответ #21 : 18 Март 2023, 21:33:39 »
Как обычно уж - всё умерло :lol:
Ожидаемо, ибо никому не надо

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1144
    • ВКонтакте
    • Steam
    • Просмотр профиля
Эмуляция коопа Zero Tolerance
« Ответ #22 : 18 Март 2023, 21:35:31 »
Ты тут как тут. Мы учимся тебя игнорировать, можешь не стараться.

Оффлайн StRyK

  • Пользователь
  • Сообщений: 538
    • Steam
    • Youtube
    • Просмотр профиля
Эмуляция коопа Zero Tolerance
« Ответ #23 : 18 Март 2023, 21:39:56 »
Ты тут как тут. Мы учимся тебя игнорировать, можешь не стараться.
Ты можешь кого угодно игнорировать, но это не отменит факты тех, кого ты игноришь

Оффлайн TiberiyLTim

  • Пользователь
  • Сообщений: 348
  • Пол: Мужской
  • -=TLT=-
    • Просмотр профиля
Эмуляция коопа Zero Tolerance
« Ответ #24 : 04 Апрель 2023, 00:56:56 »
Segaman
Можешь скинуть код SDK или это закрытый проект? Мне без разницы на каком ЯП, нужны адреса больше.

Оффлайн OFFSPRINGER3

  • Пользователь
  • Сообщений: 86
  • 1312
    • Просмотр профиля
Эмуляция коопа Zero Tolerance
« Ответ #25 : 13 Сентябрь 2023, 11:31:01 »
Что там, получилось уже поиграть вдвоем?  :lol:

Оффлайн AuAurora

  • Пользователь
  • Сообщений: 1584
  • Мур
    • Youtube
    • Просмотр профиля
Эмуляция коопа Zero Tolerance
« Ответ #26 : 13 Сентябрь 2023, 17:31:27 »
отыгрались)

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2501
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Эмуляция коопа Zero Tolerance
« Ответ #27 : 13 Сентябрь 2023, 21:21:37 »
дык деньги надо. без денег как-то у Сегамана не получается.

Оффлайн AuAurora

  • Пользователь
  • Сообщений: 1584
  • Мур
    • Youtube
    • Просмотр профиля
Эмуляция коопа Zero Tolerance
« Ответ #28 : 13 Сентябрь 2023, 21:31:55 »
Дык у него ж всё готово было к доделке. Доделал бы и показал бы, кому надо - купил бы у него, как сейчас модно. Я дико угорел с мода для ластухи, защищённого дрм)

Оффлайн lupus

  • Пользователь
  • Сообщений: 3809
  • Пол: Мужской
  • man with no face
    • ВКонтакте
    • Просмотр профиля
Эмуляция коопа Zero Tolerance
« Ответ #29 : 13 Сентябрь 2023, 23:08:12 »
дык деньги надо. без денег как-то у Сегамана не получается.
Да ладно, он без денег мне хакнул для перевода Life on Mars мегодрайвовский.