Це цікаво

Як єдиний рядок стародавнього коду цілих півроку зводив з розуму розробників MMORPG


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

Aliens: Colonial Marines була проблемною з багатьох причин, але швидко стала загальним посміховиськом, коли з’явилися подібні віральние кліпи, в яких ксеноморфы безглуздо бродять по рівнях. У цьому місяці розробник модів виявив, що причиною глупейшего поведінки ІІ «чужих» стала одна помилка в коді гри. (Про це була стаття на Хабре.) Упс. Але це не єдиний випадок за цей рік, коли гра виявлялася принижена з-за упущеної клавіатурної помилки. На початку 2018 року фанати виявили, що ШІ Civilization VI підозріло вдаряється в релігію: справа в тому, що слово «yield в коді було написано як «yeild».

Тому не дивно дізнатися, що в розробці ігор повно таких моментів.

Леа Міллер кілька років працювала дизайнером в колишньому розробника MMO-ігор Mythic Entertainment. Вона займалася сценаріями, дизайном контенту і систем для Dark Age of Camelot і Warhammer Online: Age of Reckoning. У момент випуску студія стала отримувати від фанатів скарги: гра здавалася повільною і малоотзывчивой. Гравці не могли визначити, у чому конкретно була причина.

Це було просто… відчуття?

«Команда розробників переглянула систему бою, щоб він відчувався більш швидким і шукала неефективні операції на стороні сервера, від яких можна було позбутися», — розповідає Міллер. «Але все одно відгуки були занадто розпливчастими, ніхто не міг сказати точно, в чому причина. Був це недолік в загальному дизайні гри? Уносилося безліч змін, щоб поліпшити відчуття від гри, і хоча багато з них були справжніми поліпшеннями, корінь всіх проблем вирішити не вдалося».


Warhammer Online не зібрав велику аудиторію і в результаті був закритий у 2013 році.

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

Один з відносно нових програмістів вивчав код Age of Reckoning і виявив щось дивне. У ньому як і раніше залишалася рядок, ставилася до попередньої MMO студії, Dark Age of Camelot. Вона виконувала обробку гравців на дайлапе. Так, на дайлапе. Dark Age of Camelot була випущена в 2001 році, в епоху, коли широкосмугове підключення ще не стало стандартом. У той час гравцям доводилося стежити, щоб ніхто не піднімав трубку, інакше з’єднання розривалося. (День, коли моя сім’я купила модем на 56K, був чарівним.)

«Він досить недавно працював в компанії і не був знайомий з кодом», — розповідає Міллер. «І можливо тому він вивчав цей фрагмент більш уважно, ніж решта до нього».

Після видалення рядка проблема зникла. Гра знову стала плавною.

Так що ж сталося? В наші дні потужні комп’ютери, а Інтернет швидкий. Але на початку епохи MMO все було інакше, тобто ігор доводилося йти на компроміси.

«В мережевому коді Dark Age of Camelot була єдина рядок, штучно замедлявшая частоту передачі певного типу даних клієнтом і сервером», — пояснює Міллер. «Думаю, основна мета цього полягала в оптимізації завантаження мережі, проте можливо це була частина системи, призначеної для того, щоб підключаються за дайлапу гравці були конкурентноздатні в PvP. Ця затримка була майже непомітна для гравців в Dark Age of Camelot, тому що боївка гри була підлаштована під стандартну ширину смуги і обчислювальні потужності тієї ери. Тільки у дуже малої частки гравців були системи, здатні обробляти дані швидше, ніж вони вирушали і приймалися».


На відміну від Warhammer Online, Dark Age of Camelot раніше на плаву.

У процесі розвитку Dark Age of Camelot його мережевий код теж еволюціонував і займався такими функціями, як управління піковими значеннями затримок, вхід на сервери та іншими завданнями. Через десятиліття роботи Dark Age of Camelot студія Mythic вирішила перенести той же код в Age of Reckoning.

Як виявилося, він зламав функціонал в зовсім несподіваному місці.

До того часу, коли Mythic усунула проблему, більшість гравців повернулося назад до World of Warcraft. Цей баг не був єдиною причиною проблем Age of Reckoning, але він вніс у них свій внесок.

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

Literally every single time I type the word “acquired” I have a PTSD flashback to Deus Ex 2 where we had a misspelled asset directory called AquiredDataText that we could never ever rename so I typed “aquired” for three years.

— Brian Sharp (@bhsharp) June 29, 2018

Брайан Шарп: Буквально кожен раз, коли пишу слово «acquired», я відчуваю посттравматичний флешбэк з Deus Ex 2, в якому ми помилково назвали папку з ресурсами AquiredDataText, і не могли її перейменувати. Мені довелося три роки підряд писати «aquired».

Right before launch of Undead Nightmare, the script on the zombie bait dynamite got a misplaced comment in the iterator that directed “actors” to walk to it. So, uh, it suddenly started working on Marston himself.
Plot twist!

— Trick Dempsey (@TrickDempsey) July 17, 2018

Трик Демпсі: Прямо перед випуском Red Dead Redemption: Undead Nightmare в итераторе скрипта динамітної приманки для зомбі була раскомментирована рядок, спрямовувала акторів прямо на приманку. Тому вона раптово стала спрацьовувати і на самого Марстона (головного героя).
Несподіваний поворот сюжету!

I shipped a game on PSP (so before patches) that would 100% crash on load if it was a leap year…

— Matt Lacey (@LaceMattley) July 14, 2018

Метт Лейсі: Я випустив гру на PSP (тобто без можливості її пропатчити), яка стовідсотково крашилась, якщо рік був високосним…

Typos that are enshrined code into are INCREDIBLY common. They’re also hard to remove in many cases because you have to consistently rename everything that uses the typo in order to not introduce new bugs.This is why the medical stats software I work on has Surigcal all over

— Ailie (@cenuji) July 17, 2018

Ейлі: навіки залишилися в коді помилки зустрічаються НЕЙМОВІРНО часто. Крім того, дуже часто їх складно усунути, адже щоб не додавати нових багів, потрібно все перейменувати єдиним чином. Саме тому в медичному, над яким я працюю, всюди зустрічається слово Surigcal (замість Surgical).

I was once in a huge demo and pressed a button while saying “now you’ll see a blue ball” as a giant green ball appeared. Forgot to call the apply function. Tried to talk my way out of it but nobody bought it.

— Andrew Eiche (@buddingmonkey) July 14, 2018

Ендрю Ейке: одного разу я був на серйозному демо-показі, натиснув на кнопку зі словами «зараз ви побачите синій куля», і з’явився величезний зелений куля. Я забув застосувати функцію. Спробував заговорити цей фейл, але ніхто не купився.

A few days ago, @cukiakimani reports Semblance was suddenly running at 19 Frames Per Second out of nowhere.

Turns out 1 line of my code was consuming 41 СЕК. I found that absolutely hilarious. pic.twitter.com/V21hLfmrTg

— South African Articulate Dolph Ziggler (@_benjamming) January 12, 2018

Дольф Зіглер: Кілька днів тому @cukiakimani повідомив мені, що гра Semblance раптово почала працювати при 19 кадрах в секунду.

Виявилося, що один рядок мого коду пожирає 41 СЕК. Мені здається, це абсолютно чудово.

I had a project due at midnight but it wasn’t working right. i had an hour left, i had waited for a ta for 3 hours, and i was ready to cry. TA finally comes over, looks at my code for 30 seconds, tells me to change one variable on one line. It runs perfectly.

— Trying his Best (@Willipossiblyam) July 14, 2018

Trying his Best: У мене був проект, який потрібно було закінчити до півночі, але він не працював правильно. Залишався всього годину, я чекав асистента викладача вже три години і був готовий розплакатися. Нарешті асистент прийшов, півхвилини подивився на мій код і сказав змінити одну змінну в одному рядку. Все запрацювало ідеально.

Я б хотів виділити одну помилку, яка просто підірвала мій мозок.

У дитинстві я був одержимий Super Mario 64. Це була перша гра, в яку я грав на японському, спасибі магазину імпорту, який знаходився поруч з кінотеатром, в який ми часто ходили. (Вони брали з людей гроші за годину гри в імпортну копію першого 3D-платформера про Маріо! І воно того варте.) Коли мені нарешті вдалося придбати додому власну копію Super Mario 64, я був одним з того безлічі людей, які в процесі збору 120 зірок і пошуку Йоші дивувалися, чому так неймовірно складно проплисти через підводні кільця. І причина знайшлася!

You see this in a few Mario games. Lakitu was supposed to throw spinies directly at you in Super Mario Bros., but a typo in the code prevented him from aiming. And there’s this bug in Super Mario 64:https://t.co/GddMkpMZh4

— Vincent Kinian (@Video_Game_King) July 17, 2018

Вінсент Киниан: Цей баг можна побачити в декількох іграх про Маріо. В Super Mario Bros. Лакиту повинен був кидати шипастых черепах Spiny прямо на гравця, але з-за помилки в коді цього не відбувалося. А є ще цей баг в Super Mario 64: https://t.co/GddMkpMZh4.

Приголомшливо. Незрозуміло, як відеоігри взагалі існують.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Close