Как один недочет полгода заруинил

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

Собрав определенное количество репортов с логами крашей были найдены основные точки отказа — они лежали в интерпретаторе JASS. В местах, где должен осуществляться поиск по имени функции или переменной, что-то шло не так — словно запрашиваемые имена не существовали. На практике это было невозможно — JASS строго проверяет синтаксис и не позволяет обращаться к необъявленной переменной или функции, учитывает регистр букв, не позволяет использовать символы за пределами ASCII. Запустить карту с некорректным именем переменной просто не получится, а значит, что-то портило имя на лету. Но что именно?




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

История одной карты на одном патче

TL;DR: История крупного бага, который был пофикшен буквально чудом. Причина бага — ужасная документация изменений в новых патчах WC3 и переоптимизация самой карты. Текст слегка технический и больше нудный, чем детективный. Я предупредил.

В конце прошлого года было принято решение, что RGC должны перейти на версию 1.27. Причина банальна — пользователей Win10 стало слишком много, это же развивающаяся Европа, а не Средняя Азия. А Win10 в принципе не очень дружелюбна к старому софту, особенно — если речь про игру, которая создавалась еще во времена Windows 98. Поэтому миграция была необходима. К счастью, 27а вполне себе совместима с мемхаком, поэтому никаких проблем не предвидилось.

Запускать карту на RGC было невозможно из-за старого клиента, т.к. не было поддержки встроенной DLL — античит воспринял бы её как чит. Поэтому тесты велись на 1.26, на гарене и ей подобных клиентах. Дело шло медленно, т.к. прямого доступа к хост-боту не было, а хостить самому на слабом интернете — то еще удовольствие. Но худо-бедно, патчи клепались, прогресс набирался, карта становилась стабильной. И, как это обычно бывает, в тихой гавани началась буря.



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

Убить Рошана с одного удара - пояснение

В связи с тем, что информация о природе бага, описанного в топике про Рошана, была результатом предположений, её правдивость также находилась под вопросом. После лоботомии варкрафта Фукей сумел найти, в чем именно заключалась загвоздка игры с апгрейдами и спеллбуками. Далее приведен миниатюрный разбор ситуации by Fukkei.

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

Roshan на один удар

Когда-то давно мегакрипы умирали от одного взмаха якорем  Tidehunter. На  Forge Spirit до сих пор нельзя применять барабаны, а  Void может стереть их с одного прыжка, даже не атакуя. Но, конечно, самым заметным примером этого бага остается  Roshan на один удар.

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