Опыт - сын ошибок трудных

Каждый фатал по своей природе уникален. Они не появляются в каждой игре, а являются следствием соединения сразу нескольких обстоятельств воедино. Я запускаю карту раз по 50 в день, и любые проблемы, которые появляются «стабильно», всегда попадут на стол для препарирования, не дойдя до игроков. Единственное исключение — мультиплеер, тестировать который мы начали после провала с самой первой 88a, которая идеально работала в сингле, а в сетевой игре страдала от множественных фаталов и десинхронизаций.

Источников для проблем было великое множество. Работая с уровня встроенного игрового кода, прострелить себе ногу довольно сложно — каждая команда внутри оснащена всеми необходимыми проверками безопасности и корректности аргументов, за оочень редкими исключениями. Уронить игру в фатал весьма непросто — и обычно это достигалось не с помощью кода, а его побочных эффектов и недоработок самих Blizzard. Например, существует хорошо известный мапмейкерам фатал при удалении книги заклинаний, содержащей ауру, с мертвого юнита. При таком стечении обстоятельств игра мгновенно вылетает, и в прошлом это недоразумение подарило немало часов дебаггинга в LOD. В чем же была проблема?



Читать дальше →

Я уже говорил тебе, что такое безумие?

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



Но некоторые фаталы поражают своей… невозможностью. Как, например, этот, ради которого я и решил написать этот микроблог.

Читать дальше →