Рубрика развивается при поддержке
Gamedev
Антон Самитов
16 318

Геймдев-детектив: как Obsidian несколько месяцев искала причину загадочных смертей напарников в The Outer Worlds Материал редакции

Проблему пытались решить ещё до релиза игры.

В закладки
Аудио

Один из лидов QA-отдела в Obsidian Entertainment, Тейлор Своуп (Taylor Swope), рассказал в своём твиттере о том, как в студии несколько месяцев не могли установить причину одного из багов, устранённых лишь в патче версии 1.2.

Игроки неоднократно жаловались, что некоторые квесты, связанные с компаньонами, помечались в журнале как проваленные — игра утверждала, что напарник мёртв, хотя с ним всё было в порядке. Ситуацию затрудняло то, что напарники в The Outer Worlds могут погибнуть только на уровне сложности «Сверхновая».

Мы сталкивались с этой проблемой ещё до релиза игры — был один или два случая, но никто из QA не мог воспроизвести ошибку. Вопреки всем усилиям, узнать об ошибке какие-либо подробности мы не могли.

Установить причину было так сложно из-за невозможности определить, когда именно произошёл баг. Каждый известный случай обычно описывался так: «В последние десять часов что-то пошло не так и теперь у меня сломался квест».

Нам пришлось определить, где находились те скрипты и строчки кода, из-за которых игра может подумать, что этот персонаж мёртв.

Тейлор Своуп
лид QA-отдела в Obsidian

Вскоре разработчики всё-таки выяснили, что баг возникает из-за скрипта, который запускается каждый раз, когда здоровье компаньона падает до нуля. Если персонаж находится в отряде, то его возродят по окончании боя, если нет — игра отмечает его как мёртвого.

После этого в Obsidian построили возможную причинно-следственную цепочку.

  • Напарники не считаются частью отряда, только когда находятся на корабле-базе.
  • Однако на корабле они не получают урона от атак, только от окружения — например, падений с высоты.
  • При этом нигде в этой локации нет места, откуда персонаж мог бы упасть и погибнуть.
  • Значит, нужно было узнать, как они попадали куда-то за пределы основного уровня.

Члены команды QA перепроверили множество теорий, включая неверные переменные о высоте и ошибки физического движка, но ни одна из них не подтвердилась. К тому времени The Outer Worlds уже вышла и с багом начали сталкиваться простые пользователи.

Разгадку Своуп обнаружил почти случайно, когда увидел один из отчётов о баге от игрока. Тот упомянул о странной ошибке — он видел, как NPC лезет вверх по воздуху, будто по лестнице. И тут разработчик понял, как напарники поднимались на невозможную на корабле высоту.

Баг обнаружили в системе взаимодействия NPC с предметами окружения, которую в Obsidian называют «мебель» (furniture). В неё входит большая часть действий персонажей — например, «сесть на стул», «опереться на стену» или «использовать терминал». Проблема была в том, что любые подобные взаимодействия отключались, как только игрок вступает в диалог.

Использование лестницы же состояло из двух разных взаимодействий с «мебелью». Первое — взяться за лестницу и начать лезть по ней, второе — остановиться и слезть с неё.

Поэтому, если игрок вступал в беседу с кем-то, когда кто-то ещё поднимался по лестнице, то персонаж попросту не смог бы остановиться.

Тейлор Своуп
лид QA-отдела в Obsidian
So, if someone started climbing a ladder and the player entered a conversation before they stopped, they wouldn't be able to exit the ladder, and, well…. (18/18) https://t.co/xcduTy4d12

В итоге сотрудники Obsidian просто включили систему «мебели» во время диалогов. По словам разработчика, куда сложнее было «починить» игру для тех, кто уже столкнулся с багом и снова открыть этим пользователям доступ к прохождению нужных квестов.

Как оказалось, Своуп уже писал о ситуации в своём твиттере, когда пытался «поймать» баг.

if you want to know how my week is going, I've got a post-it note on my wall with "What can kill the unkillable??" written on it
Если хотите знать, как проходит моя неделя — у меня на стене висит бумажка с надписью: «Что может убить неубиваемое?»
Это была мебель.
{ "author_name": "Антон Самитов", "author_type": "editor", "tags": ["\u043d\u043e\u0432\u043e\u0441\u0442\u0438","\u0438\u0441\u0442\u043e\u0440\u0438\u0438","theouterworlds"], "comments": 88, "likes": 436, "favorites": 235, "is_advertisement": false, "subsite_label": "gamedev", "id": 87180, "is_wide": false, "is_ugc": false, "date": "Fri, 13 Dec 2019 20:21:30 +0300", "is_special": false }
Проект в сеттинге киберпанка
Вакансия Game Designer
я с вами!
0
88 комментариев
Популярные
По порядку
Написать комментарий...
200

Люблю такие истории, а ведь работа QA-инженеров зачастую крайне недооценена.

Ответить
77

Увидеть и описать - это полбеды. А лютый пипец начинается, когда не получается его воспроизвести :)

Ответить
10

Как QA подтверждаю, что там с багами которые воспроизводятся с полпинка, с ними даже не интересно работать. 

Ответить
119

Так и видится ситуация:
— Выпустили на удивление "чистый" продукт, баги есть, но простые. QA отдел долго томится в унынии, всё легко, не интересно, у ребят началась ломка, они ненавидят жизнь, работу, свою профессию.
Но тут приходит репорт и описанный в нём баг оказывается сложным, неуловимым. QA специалист в момент осознания, что вот он, достойный враг:

Ответить
16

Согласен!

Иногда ребята из QA такое находили, что в принципе в голову не придёт, спасибо им за это (не без ненависти (и не без уважения))

Ответить
4

Наши разработчики: - это всё тестировщики, палки в колёса нам вставляют :D

Ответить
2

Ло. Ги.

Ответить
4

Все не залогируешь

Ответить
0

Так-то залогируешь, но, как правильно заметили, копаться становится всё веселее и веселее.

Ответить

Иркутский Валера

Loser
3

Если сервисов 80 на одной ноде крутится, и ты вообще не знаешь с чего начать, тогда копать логи становится оооочень увлекательно))

Ответить
15

В этом прелесть программирования - иногда приходится сталкиваться с невероятным. Люди вокруг ходят, крестятся, говорят, что это сверхъестественное, а ты ищешь объективные причины бага.

Ответить

Короткий холод

Aleksey
4

Вот зря недооценивают. Когда мы в нашу маленькую инди-команду взяли QA - это было счастье.

Ответить
–157

а причина проста  - руки растущие либо из никуда либо из жопы у программеров обсидиан, это уже в общем дефолт

там такое ощущение что чей то кум или брат сидит тупо на зарплате и еле пишет код для игр от обсидов

Ответить
75

https://ru.wikipedia.org/wiki/%D0%AD%D1%84%D1%84%D0%B5%D0%BA%D1%82_%D0%94%D0%B0%D0%BD%D0%BD%D0%B8%D0%BD%D0%B3%D0%B0_%E2%80%94_%D0%9A%D1%80%D1%8E%D0%B3%D0%B5%D1%80%D0%B0

Я думал, мне эту статью придется кидать только доморощенным футболистам и про-геймерам, но нет.

Ответить
–64

ну чувак ты как бы не играл в их игры со времен ice wind dale да и говоришь о каких то синдромах о которых ты понятия не имеешь

просто в твоих глазах я их обижаю, но это знает и крис авеллон, который уже не работает в обсидиан, и фергус уркхарт и джош сойер, что у них реально кривоватые люди на программистах

Ответить
48

ну чувак ты как бы не играл в их игры со времен ice wind dale

Да что ты говоришь.

да и говоришь о каких то синдромах о которых ты понятия не имеешь

Да что ты говоришь!

Ответить
–47

ну на моей стороне аргументы ты можешь тупо картинки постить и статьи из википедии, доктор я мутант?

если сам Авеллон говорил в своем интевью по поводу кампании обсидиан, что у них там развито кумовство, если ты конеш знаешь что это такое вообще

ну то есть это вообще нормально, но в данном случае деструктивно сказывается на некоторых проектах

и опять же я не осуждаю, это люди сами признают как бы, это просто нормально сказать что игры в тех реализации у них кривинькие

как и тот факт что rpg вообще очень сложные игры в технической реализации

Ответить
0

Но вообще, где-то Уркхарт говорил (я переводил интервью), что до первого Южного парка, то ли до Dungeon Siege 3 у них не было автоматизированной системы отслеживания ошибок, всё тестировалось с карандашом и листом бумаги. Что-то в этом роде. Могу поискать, в принципе.

Ответить
0

ну как и говорил собсна, это по сути локальный мем кампании, но мб большинство просто не  в курсе, Фергус кстати реально очень занимательный персонаж

по словам Криса - мерзкий типчик, но чет все его выходки терпят  и продолжают работать под его руководство, ибо все знают друг друга всю жизнь, и на конфликт уже походу и не идут, а Крис требовал справедливости и адекватного отношения в коллективе, печально что щаз Крис на фрилансе, мб оно и к лучшему, он щаз новый Pathfinder делать будет с owlcat

Ответить
0

Я не знаю, как там у Фергюса, Крис наверняка во многом преувеличивает, как и любой человек, которого обидели (и который припоминает все обидки за все года, попутно раздувая их), но ответ на ваш вопрос не очень-то сложный. Я работал в нескольких коллективах, где люди между собой очень ладили, при этом начальник у них был — ну, такое себе. Ну и работали потому, что 1) нужны были деньги, 2) коллектив хороший, друзья, всё такое, а в другом месте хз, как сложится.

Ответить
36

не могут себе позволить такого эксперта как ты

Ответить
–27

тебе тоже самое адресовано

просто в твоих глазах я их обижаю, но это знает и крис авеллон, который уже не работает в обсидиан, и фергус уркхарт и джош сойер, что у них реально кривоватые люди на программистах

Ответить
20

А у тебя большой опыт в разработке ПО сложнее сайта на вордпрессе?
Не отвечай.

Ответить
–22

нет, это очевидно что программировать игру это тяжкий труд, наверно самая ответственная работа во всем геймдеве

Ответить
7

Ну в данной ситуации баг было тяжело предвидеть.

Ответить
–5

да ну это так в общем было написанно ибо это как локальный мем про обсидов в плане тех реализации их игр

просто челы слишком близко в сердцу приняли, я хз

но как я и сказал даже в poe 1 до сих пор есть баги не очень вменямые, ибо rpg это очень сложные проекты

Ответить
13

"Кум сват руки из жопы" - не похоже на мем, а скорее на прямой наезд на разработчиков. ;)

Многие свои игры они делали с ограниченными ресурсами и в большой спешке - баги были неизбежны.

Ответить
–1

ну вот я про это и говорю, что люди просто не понимают что это не наезд вообще никакой

я играю в их игры со времен interplay и они у меня все есть, в цифре и в физике, не говоря уже про nwn 2 сколько часов я наиграл (и вообще признатся честно я их люблю)

вообще мало кто вспомнит что них была эта игра как шедевр, одна из лучших rpg в истории

но соре я просто же хочу обосрать обсидиан, пусть эти люди думают так как им нравится

Ответить
3
Ответить

Короткий холод

Somulo
3

Поэтому существуют отличные проекты, для которых вообще не привлекались профессиональные программисты.

Я тебе по секрету расскажу - весь продакшн игры (арт, программирование, геймдизайн) - это тяжкий труд. И маркетинг игры - это тяжкий труд. И аналитика - это тяжкий труд. И тестирование - это тяжкий труд. И даже найти специалистов (HR) это тяжкий труд. А если кто-то хуи пинает - то игра не взлетит.

Ответить
0

как и борьба с ветряными мельницами, думаю самый тяжкий труд

Ответить

Короткий холод

Somulo
3

Тебе лучше знать. Это же ты героически поскакал с пикой наперевес против рук из жоп у Обсидианов.

Ответить
–1

да это был ироничный комментарий который вы все восприняли всерьез это же очевидно да

как я уже и сказал, я бы мог начать простую и понятную лекцию про понятных мне молодых людей с юношеским максимализмом, но не буду

Ответить

Короткий холод

Somulo
1

Как скажешь. Но лично я считаю, что "я просто пошутил, а вы не поняли" одной из самых детских отмазок на все времена.

Ответить
–1

ирония и шутка разные вещи, это внутренний да и внешний мем студии обсидиан, тем более после большого интервью Криса Авеллона, о внутреннем климате в коллективе обсидиан

я повторил уже 10 тысяч раз свою позицию, но если тебе лично тебе, удобно каверкать чужие слова, ну весла тебе в руки че

Ответить

Короткий холод

Somulo
0

Да где ж я "каверкал"?

Ответить
1

"я просто пошутил, а вы не поняли"

детских отмазок

Ответить

Короткий холод

Somulo
0

Так почему же "каверкал"?
ирония и шутка разные вещи

Шу́тка — это фраза или небольшой текст юмористического содержания.

Существуют различные формы юмора: ирония, пародия, сатира, анекдот, шутка, каламбур и так далее.

То есть, вы сказали, что пошутили. Ведь ирония - это однозначно разновидность шутки.

Ответить

Комментарий удален

Предвыборный

Somulo
0

ты взял лопату и долго копал себе могилу перед тем как лечь =D

Ответить
–1

ну это не моя проблема если вы очевидных вещей не понимаете, ещё раз можно написать про обезумевшую толпу, вы как раз оно самое

Ответить
1

пиздец у тебя самомнение, нельзя так жить

Ответить

Комментарий удален

9

Ой, да попробовал бы сам поискать причину такого бага. Тоже мне тестер. Ты бы тысячу часов потратил и не нашёл его. 
Хорошие у них тестеры и прогеры. 
Этот баш слишком странный и его слишком сложно найти в предыдущих 10 часах игры. Пройди ещё догадайся почему NPC поднимаются на недостижимую для них высоту.

Ответить
0

на самом деле мы я до сих пор знаю пару таких багов poe 1-2 до которых руки обсидов так и не дошли, но опять же, люди просто подумали что я ругаю их, или просто как то плохо отношусь

Ответить
3

Слишком грубо. Баги появляются всегда, где-то перепутал что-то, где-то символ не пропечатал, а где-то забыл, что назначил переменную в другой функции и она переопределяется. Это сложная работа в которой работают простые люди. Прояви уважение.

Ответить
0

ты просишь проявить уважение человеку который играл во всех их игры, они мне блять как родственники если че наряду с биовер, они сами рофлят с этого

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

Ответить
0

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

Ответить

Комментарий удален

Комментарий удален

Комментарий удален

1

Руки здесь ни причем, ты не знаешь что такое разрабатывать игры. 
В компании есть лимитированный бюджет и во что бы то не стало нужно успеть к сроку иначе банкротство и разорение компании, сотрудник продуктивен только первые 4-6 часов, дальше идет резкий спад продуктивности и невнимательность, сотрудника всегда заставляют кранчить и работать по 12-14 часов что бы успеть к сроку, как следствие качество написанного кода падает, кривой код не всегда можно переписать так на его написание может уходить несколько месяцев.

Читай книгу "Кровь, пот и пиксели. Обратная сторона индустрии видеоигр" там это подробно объяснено.

Ответить
0

«Мы ведь не абсолютные идиоты. Мы прекрасно осведомлены о своей репутации [производителей] забагованных игр. И хотя кое-что из этого присуще сложности создания больших и комплексных RPG с тысячами различных путей прохождения, мы всё ещё в силах уменьшить количество ошибок, если у нас будет дополнительное время. В таком случае лишь издатель решает, лишить ли нас этой возможности».

Джош Сойер, Obsidian Ent. (c)

бля чел если ты дурак, то ты дурак, ты не понимаешь кого ты учишь и что ты несешь, ебать, я уже объяснил 100 дебилам как есть, но вы все продолжаете нести хуйню свою, земля тебе пухом, 15 icq

Ответить
0

Такую страну просрали!

Ответить
22

Ошибка: робот погибает при попадании в него гранаты (именно от попадания, а не от взрыва) Д - дизайнер, П - программист.
Д: программисты всё сломали! почему так получается?!
П: естественно так получается! потому, что у гранаты масса 92,4 кг! зачем вы это сделали?

Д: да?! а чтобы граната в воде тонула!
П: а почему она с нормальной массой не тонет?
Д: а потому что у воды плотность большая! (прим.: больше, чем у ртути)
П: а почему плотность такая большая?!
Д: а чтобы ящики деревянные плавали!
П: а почему они иначе не плавают?!
Д: а потому что у них масса 50 кг!
П: а зачем такая масса?!
Д: а иначе они некрасиво разваливаются!

Ответить
0

Дааа... Валите всё на gd

Ответить
20

У меня так парвати погибла. Я думал ее докторша и нигерша убили, когда учили ее стрелять. Они еще и шептались "Тссс он ничего не заметит"

Ответить
0

<шутка>
А что если нигерша реально убивала других компаньонов, но обсидианам пришлось отмазываться "это все мебель", ибо SJW-твари на них наехали бы?!
</шутка>

Ответить
0

У меня так брат умер.

Ответить

Странный щит

14

Интересно)

Ответить
12

Убийца – двор… мебель

Ответить
11

Комментарий удален по просьбе пользователя

Ответить
–4

А говорят костыли - это плохо. Сделали бы напарников на корабле бессмертными и на один баг на релизе стало бы меньше.
Хотя у обсидианов это могло бы породить еще десяток багов.

Ответить
31

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

Ответить

Соответствующий каякер

Arhshed
3

А проверить не вышел ли он с navmesh и телепортировать обратно?

Ответить
1

Наверное, они так решили не делать на базе, потому что из неё невозможно выйти ... и ошиблись? 

Ответить
2

Он мог уползти в бесконечность и без моего костыля. Бессмертие не дает ему умереть при падении.

Ответить
7

Спасибо за экспертизу. Расскажите, как вам удаётся принимать такие правильные решения при полном отсутствии информации о коде игры?

Ответить
1

Опыт сынок опыт. А еще: везде конечно долбаебы, но прежде чем учить, убедись, что ты самый умный на планете.

Ответить
3

Потом в какой-то момент не сработает скрипт, который делает их обратно смертными и вот тебе новая проблема. Или, скажем, становится он бессмертным, и вот так спокойно себе лезет во время диалога за пределы корабля и теряется где-то в космосе. Вроде и не умер, но уже и не найти. Костыли - таки плохо, ведь потом бы еще пришлось писать патчи, которые чинят последствия тех костылей, а причина бага так и не установлена.

Ответить
3

 Вот только в большинстве игор каждый раз при смене локации происходит "ресет актеров", поэтому никто в "навсегда потеряться в космосе" не сможет ни при каких условиях.

Ответить
1

В играх нагромождение логик и проверок. Что-то проглядели - получай баг.

Ответить
9

парвати на гифке эпично уходит в космос, ground control to major tom 

Ответить
8

Напомнило концовку фильма "Тот самый Мюнхгаузен"

Ответить
6

Жаль, не упомянули про прекрасное предположение с коровами. :3

My personal fav was "what if a companion is standing *right* where a cow spawns in during a random event and they're launched into space"
Was genuinely bummed when that theory didn't pan out (12/18)
Ответить
2

Прекрасная статья. Спасибо! :)

Ответить
1

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

Ответить
–1

Ситуацию затрудняло то, что напарники в The Outer Worlds могут погибнуть только на уровне сложности «Сверхновая».

Если сложность не Сверхновая, при каждой прогрузке взять множество напарников, для каждого выставить переменную "жив", проверить задания напарников, при обнаружении переменной "провалено" заменить на "в процессе".

Если сложность "Сверхновая" - при смерти персонажа немедленно ставить на паузу и выводить окно интерфейса "такой-то напарник погиб". Игрок, как минимум, будет точно знать, в какой момент это произошло.

Какие у подобного решения могут быть косяки?

Ответить
1

А это уже костыль) чуваки нашли причину бага, а не стали наспех латать его последствия)

Ответить
0

несколько месяцев не могли установить причину

Не, я понимаю, сейчас полно перфекционистов, никаких костылей, код чтобы идеальный и никаких готовых ассетов. Но тут баг экспириенс руинит, совесть тоже иметь надо.

Ответить
0

Хотфикс может какой-то и был, но причину бага искали долго

Ответить
1

Круто, спасибо за историю))

Ответить
1

перевод хреновый. Например упущена деталь что "умирали" когда они в принципе не могли умереть. Например на обычном уровне сложности это невозможно, они только сознание теряют. Однако каким-то образом они все равно умудрялись подохнуть. И .т.д.

Ответить
1

Это всё - заметные баги. А сколько их остаётся невидимых внутри игр...
На днях реверсил одну маленькую игру от создателей Blur и Project Gotham Racing, которую играю уже более 10 лет, так вот уже немного копнул и баги начали выявляться сами. 
Например, в отладчике видно, как с набранным текстом игра продолжает взаимодействовать даже во время игры - его можно удалять Backspace'ом. Ещё сразу стал виден говнокод: с каждой введённой или удалённой буквой пересчитывается всё строка. Почему бы просто не хранить счётчик символов и увеличивать/уменьшать его?
Ещё, если вытащить геймпад во время игры, то игра не перестаёт непрерывно опрашивать его подключение даже после подключения. В итоге игра начинает чуть подтормаживать.
Если уж даже в маленьких проектах такое, то в таких больших вообще полный ад творится, наверно. Мы видим лишь самую верхушку айсберга.

Ответить
0

Вы лучше скажите, как шлем с них снять, а то бегают за мной васьком, мордовороты

Ответить
2

В настройках игры можно отключить показ шлемов как на себе, так и на напарниках.

Ответить
0

Там есть такая функция?? Офигенно, в Вегасе мне приходилось делать текстуры где шлема прозрачными)))

Ответить
0

никак

Ответить
0

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

Ответить
0

Словил этот баг на космостанции с Парватти. Я убежал к воротом от корабля, Парватти и другой напарник остались сзади и спускались по трапам-лесенкам, слышу умирательный крик и вижу что-то похожее на падение с платформы, потом Парватти респавнится, но ее квест проваливается, а сама она в финальном ролике была записана как убитая.

Ответить
0

ни разу не сталкивался на собеседованиях с вопросами о том как нужно строить машину состояний. 

Ответить
0

Удивительно бездарные попытки разобраться в вопросе. Неужели нельзя было добавить логирование причин/координат/последних действий для нпц?

Ответить

Прямой эфир

{ "jsPath": "/static/build/dtf.ru/specials/DeliveryCheats/js/all.min.js?v=05.02.2020", "cssPath": "/static/build/dtf.ru/specials/DeliveryCheats/styles/all.min.css?v=05.02.2020", "fontsPath": "https://fonts.googleapis.com/css?family=Roboto+Mono:400,700,700i&subset=cyrillic" }