Истребители багов: разламываем Sabre



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

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

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

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

Патрик переключился на 3D Max и стал смотреть, как элементы корабля вообще должны отделяться. В иерархии корабля хорошо видны зависимости одних деталей от других. Если выделить крыло, в окне перспективы появятся зеленые квадратики — вспомогательные объекты, использующиеся для создания спецэффектов. Попутно с устранением основного бага можно отрегулировать и их работу. В итоге Патрик настроил частицы и параметры повреждений, перегрузил xml в тестовой сцене и начал методично отстреливать крылья и прочие выступающие элементы корабля. Теперь детали корректно разлетаются в стороны по множеству различных путей.

Если посмотреть в xml на код носа корабля, там можно обнаружить строчку, отвечающую за отсоединение. В ней заданы два параметра: степень отделения и возможность отделения, а также указаны произвольные силы (для осей X, Y и Z), благодаря которым деталь после взрыва отлетит в сторону. Здесь можно установить правило, чтобы после уничтожения носа возникала некоторая вероятность его отделения. И это нужно проделать с каждым отделяемым компонентом.

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

Еще одним багом в игре стало меньше!


Комментировать