Блог розробників (FFF#270) – Підстанція з високою роздільною здатністю і огляд завантаження / збереження

Spread the love

опубліковали Klonan, Rseding, Albert

Steam Awards (Klonan)

Steam відкрив номінації Steam Awards. У минулому році Factorio була фактично обрана в якості кандидата на премію «Haunts My Dreams».

У цьому році «Кращий розробник» є категорія, і багато хто хоче вибрати нас для цієї категорії. На жаль, щоб мати право на участь, нам потрібно створити сторінку розробника, створену в Steam.

У нас були деякі обговорення, і я вирішив почекати, поки у нас не буде остаточного логотипу і теми для Wube Software, перш ніж налаштовувати сторінку розробника. Це означає, що ви не зможете проголосувати за нас як кращого розробника в цьому році …

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

Підстанція з високою роздільною здатністю (Albert)

Підстанція була ще одним з об’єктів, які ми не могли просто візуалізувати в подвійному вигляді, тому треба було досить багато часу і ітерацій, щоб дістатися до того, чим ми задоволені.

Детерміноване збереження / завантаження в Factorio (Rseding)

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

Існує кілька причин і переваг для цих суворих вимог:

  • Без цього: ви не змогли б приєднатися до багатокористувацької грі (і за допомогою проксі зберегти, вийти і відновити).
  • Без нього: система відтворення не працюватиме, якщо ви коли-небудь зберегли, вийшли і відновили гру.
  • З його допомогою ми можемо легко перевірити, що збереження і завантаження не дають ніяких помітних змін, дозволяючи нам знати, що ми правильно зберегли / завантажили.
  • З його допомогою ви не побачите, що речі випадково змінюються в результаті «перезавантаження», як в більшості інших ігор.

Звучить досить просто: зробити «запущена гра -> зберегти -> вийти -> завантажити -> запущена гра» виробляти однакові результати кожного разу (коли нічого не змінюється). Однак на практиці це виявляється досить складним.

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

На невеликому відрізку ми взяли деякий вимір того, які частини даних карти приймають який простір в типовій незжатій грі збереження:

Збереження гри досить прямолінійне:

Однак завантаження стає досить складною через безліч речей, які нам необхідно враховувати:

  • Перенесення версій карти
  • Модифікації / заміни / зміни
  • Потенційно недійсні / пошкоджені файли збереження

За роки розвитку Factorio у нас з’явилося кілька дивних звітів про помилки, пов’язаних зі збереженням не завантаження, які були відслідковані в логіці завантаження, які раніше не оброблювали всі ці особливі випадки. Кілька примітних прикладів:

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

В цілому весь процес став досить складним настільки, що нам складно запам’ятати всі спеціальні правила. Маючи це на увазі, я витратив на день раніше на цьому тижні документування всього процесу для більш простої довідки про те, що таке порядок речей і чому ми робимо те, що робимо. Для тих, хто цікавиться ще більш технічним оглядом процесу збереження / завантаження, копія цього документа можна знайти тут.

Також по темі завантаження ми вирішили відмовитися від підтримки завантаження карт з версії 0.13 і 0.14 в останній версії, а це значить, що коли ви отримаєте 0,17, ви зможете перенести гру зі збереженням з 0,15. Однак, оскільки він працював до цього, ви все одно можете завантажити 0,16 для перенесення з 0,13, а потім перейти від 0,16 до 0,17.

Футболка на свята (Klonan)

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

У минулому році були випадки, коли замовлення не принесли до різдвяної ялинки, і кілька людей повідомили, що пакети, приходили за 1 місяць до пункту призначення. Ми відправляємо замовлення з нашого офісу щосереди, тому в залежності від того, коли ви замовляєте, може знадобитися майже тиждень для підтвердження доставки. Як тільки він буде відправлений, посилка зазвичай буде доставлена ​​протягом тижня в будь-яку точку Європи і займе близько тижня або 2, щоб прибути в США і по всьому світу.

За межами доставки щотижня ми не можемо робити ніяких обіцянок, коли прибуде, тому кращий спосіб запобігти будь-яку душевний біль – це замовити з нашого магазину якомога швидше.

Як завжди, дайте нам знати, що ви думаєте на нашому форумі.


Comments: