Як ви проектуєте систему запису / повторення для гри, що часто змінюється?


10

Я працюю у вільному MMORPG і у мене є проблеми.

Я (разом з іншими людьми) розробляю систему відеозйомки для гри. Ідея в основному: ми записуємо всі надіслані та отримані пакети за допомогою часових міток, а також деякі локальні дані від клієнта, а потім скидаємо їх у файл. Для відтворення відео ми просто імітуємо все, що є у файлі. У нас також є можливість експортувати відео в avi за допомогою ffmpeg.

Проблема полягає в тому, що коли ми змінюємо версії гри, важко підтримувати зворотну сумісність для відео (команди додаються / видаляються, змінюються функції тощо). Чи є хороший спосіб вирішити цю проблему? замість того, щоб мати купу різних плеєрів і вибрати правильний для кожної версії відеофайлу?

Було б корисно знати, як інші ігри вирішують цю ситуацію.

Дякую за допомогу, вибачте за мою англійську.


Так само, як ще трохи їжі для гуглінгу / дослідження: так, як ви це робите, саме те, як Ідеї Quake Games записували демонстрації, захоплюючи серверні пакети. Наскільки мені відомо, вони просто ніколи не вирішували проблеми сумісності.
Майкл Стум

Я змінив назву цього питання - справа не в MMO, за винятком того, що MMO - це ігри, які найчастіше змінюються.

Відповіді:


8

Наше основне правило - ніколи не змінювати існуючий тип пакету. Все або додається наприкінці існуючої, або новою командою. Це також робить набагато меншою ймовірність того, що двоє людей ступають по роботі один одного.


У цій грі це буває .. Пакети додаються, видаляються, переміщуються (наприклад, деякий час тому ми вирішили перенести всі пов'язані з GM-Commands пакети в "розширений пакет", це, мабуть, повториться, коли ми перепишемо guilds system .. Редагування команд / функцій (зміна її функціональності) є менш ймовірною, але це не сенс. Ви говорите, що відтепер ми не повинні видаляти жодний пакет, видаляти команди, просто нехай вони недоступні на стороні сервера? Спасибі для вашої відповіді!
Марко

1
Так, застаріле і залиште їх там. Врешті-решт старі речі можна видалити, але це зазвичай через рік-два.
кодерангер

1
Також допоможе додаткове планування. Чим краще ви плануєте свої пакети зараз, тим менше змін вам потрібно буде зробити в майбутньому.
Килотан

Проблема в тому, що гра завжди змінюється. Ми додаємо новий пакет майже кожного місяця (ми додаємо нові функції). І все-таки нам доведеться зробити багато змін у функціях переписування старих пакетів і так далі. Але, мабуть, ми можемо залишити методи і почекати рік, щоб їх видалити.
Марко

3
Використання більш загальних типів пакетів допоможе вам тут багато. Вам не потрібно буде додавати нові повідомлення для кожної нової функції, яку ви реалізуєте.
Килотан

5

Особливо на ПК це не представляється можливим, що вони просто версують геймплейний код і підробляють версію, коли вносять зміни, що впливають на систему повтору. Якщо файл відтворення позначений версією коду ігрового коду, для якого він був створений, і клієнт все ще має доступ до цієї версії, що він повинен працювати нормально.


Ось як я це бачив на практиці, зберігайте номер версії з журналом гри. Тоді, звичайно, вам також доведеться тримати попередні версії програмного забезпечення навколо, щоб відтворити попередні журнали, наприклад, у сховищі вихідного коду, але ви, мабуть, так і робите.
Ян Шрайбер

Дякуємо за вашу відповідь, гра безкоштовна (ліцензія GPL), тому будь-хто може отримати доступ до старих ігрових версій і навіть компілювати клієнт, щоб не було проблем мати всі різні його версії. Це дуже використовується, не всі альтернативні сервери використовують найпізніші версії, є сервери, які працюють із версіями з 2004 року.
Марко

@Marco: Я підозрюю, як працює SC2 - це те, що він містить майже весь код у DLL. Коли він завантажує реплей, він перевіряє версію та завантажує DLL для цієї версії та запускається. Це досить складно, але користувачеві потрібна лише одна установка, і один exe може запустити всі старі повтори.
Mooing Duck

1

Один із способів вирішення цього питання - це гра, яка називається "Герої Ньюерта". (що змінюється кожні +/- 2 тижні) З того, що я можу їм сказати:

  1. Використовуйте різні виправлення для гри та повторень.
  2. Усі повтори зберігаються у хмарі. З часом вони закінчуються.
  3. Якщо користувач хоче переглянути стару завантажену програму, потрібно спочатку скористатися кнопкою «Сумістити».
  4. Схоже, цей або дистанційний відрізняється від останньої версії; або у випадку, якщо перезавантаження більше не зберігається, завантажуйте його, а потім виконується віддалений розл.

Оскільки я не працюю в S2, я чітко не можу сказати, що це точно так працює. Однак я помітив помітну тенденцію розміру завантаження, пов’язану з віком повтору.

Або це, або вони додають патчі сутності до відтворення (наприклад, заклинання X має ефект Y замість ефекту Z). Якщо інформація, що стосується пакетів, також зберігається в конфігурації сутності, ця суть гарячого виправлення дозволить зрозуміти і більш старі пакети.

Я точно не хотів би зберігати історичну поведінку клієнта, оскільки це може отримати надзвичайно швидко. Особливо, коли клієнт оновлюється, наприклад, з 10.1.0 до 10.2.0 (оскільки їм потрібно завантажити кожен патч між двома версіями, а не остаточний патч).

Google Protobuf - хороша ідея як шар серіалізації, оскільки він підтримує такі речі за дизайном.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.