Автор | Сообщение |
Maddzi [B0S] - Lance Corporal -
 | 212 |
 Doom Rate: 1.98
|
Отправлено: 01.08.12 10:12:16 | |
| Решил создать отдельную тему, посвященную исключительно багам, методам борьбы с ними и их дальнейшем продуктивном использовании. Предлагаю поучаствовать каждому, ведь все мы так или иначе с ними сталкивались, и у всех, кто активно занимается вадописательством, накопилось достаточно историй, связанных с топиком.
Структура поста пусть будет такая:
1.Описание бага (скриншот, скрипт, код - все, что нужно для максимально детального описания проблемы)
2.Решение пробемы (скриншот, скрипт, код)
3.Варианты применения (описание, можно пример)
Начну с себя.
1.Сегодня при работе со светом выскочил интересный баг, при котором нижняя часть стены освещалась, а верхняя оставалась совершенно темная. Сектор один и тот же, порт гздум 1.5.06 с выключенным opengl, дум ин хексен.
Проблема возникла при использовании спешла 50(Transfer Brightness Level) с привязкой к сектору-обьекту, в котором нужно было сделать оверрайд освещения. Флаги расписывать не буду, так как для этой проблемы они несущественны.
2.Как оказалось, при трансфере этим спешлом освещения в сектор, есть одна особенность - он передает свет ТОЛЬКО в диапозоне высоты сектора-родителя, то есть, если мы хотим передать освещение из сектора S1 в сектор S2, при этом высота сектора S1 составляет 100(0;100), а высота сектора S2 - 128(0;128), то при передаче освещения стены сектора S2 с высоты 0 до высоты 100 включительно примут навязанное освещение, а с высоты 101 по 128 освещение останется таким же, какое было указано в секторе изначально. Правда есть один момент - нельзя стаковать эти "сектора" освещения больше 2-х друг над другом - не будет нормально работать.
3.Шикарный баг, как я считаю. Вполне применим для создания иллюзии динамического освещения, к примеру, тени от ящика на стене. Вполне используем со слоупами для создания диагональной вертикальной тени. Пользуйтесь на здоровье.
Пример:
Вад - http://rghost.ru/39510446, iwad tnt evilution (привычка )
Итак, продолжаем  | |
|
| |
c4tnt Chief Petty Officer
 | 934 |
 Doom Rate: 2.13
|
Отправлено: 01.08.12 14:54:05 | |
| Это не баг, это фича: http://zdoom.org/wiki/ExtraFloor_LightOnly
Кстати, о багах. Когда переделывал скрипты для MoP нашёл забавный баг в ACS. Компилятор считает любой предварительно инициализированный массив массивом строк, даже если этот массив содержит вовсе не строки, а числа. Вторая сторона этого бага в том, что не-массивы с инициализацией компилятор считает всегда числом, даже если в оригинале оно было строкой. Вроде бы ничего страшного и всё работает, поскольку в ACS строка - это на самом деле номер из строковой таблицы...
Но интересное начинается при изготовлении ACS библиотек ( обычная для модов практика ). При загрузке библиотеки в ней все опознанные номера строк сдвигаются так, чтобы не пересекаться с номерами строк из других библиотек или из скрипта карты. В результате при загрузке мода вместе с картой, на которой есть скрипты, все массивы ( даже только с цифрами ) благополучно превращаются в кашу.
В моём случае использовался довольно большой смешанный массив примерно такого вида:
int Monsterdata[MOPMONSTERCOUNT][8] = {
...
{"CacoDemonClass", "", "MCacoDemon", "HEADA1", 0, 1, 0, 120},
...
}
что тоже само по себе багофича. Строк там много, поэтому делить на строковую и числовую часть не хотелось, к тому же это ещё и не помагало.
Соорудил вот такое решение:
int TextBase[2] = { "", 0 };
function int _arraynumeric( int in )
{
return in - TextBase[1];
}
Этой функции скармливаем прочитанное из массива в случае, если там должно было быть число а не строка. Она убирает лишнее смещение, если таковое имеет место быть. | |
|
| |
Maddzi [B0S] - Lance Corporal -
 | 212 |
 Doom Rate: 1.98
|
Отправлено: 01.08.12 16:12:53 | |
| c4tnt
В ДБ2 этот спешл называется "Transfer Brightness Level", за который, собственно, я его и держал, а при использовании открылись некоторые нюансы, и поэтому я и решил, что он - баг. Так что мне простительно
Что до твоего бага - тут даже прокомментировать не смогу, не пробовал пока в этом разбираться, и для меня это выглядит как дремучий лес. Если у тебя есть единый гайд по array'ам и прочей чепуховине - поделись ссылочкой, пж, а то мне, гуманитарию, тяжко будет в этом разобраться  | |
|
| |
c4tnt Chief Petty Officer
 | 934 |
 Doom Rate: 2.13
|
|
| |
c4tnt Chief Petty Officer
 | 934 |
 Doom Rate: 2.13
|
Отправлено: 12.08.12 16:12:43 | |
| Кстати, не дам теме засохнуть. Наверняка не все знают, но в сетевом режиме игры скуллтага при вызове клиентских скриптов в параметрах можно передавать только числа от 0 до 255. И ещё немного забавных багов скуллтага и, потенциально, его последователя и продолжателя: в сетевой игре если у тебя есть инвентарный предмет, который при использовании превратит тебя во что либо, то в скуллтаге он остаётся призраком в инвентаре. Можно исправить, перенеся морфинг в скрипт и добавив задержку. Кроме этого у клиентов при морфинге пропадает подсветка экрана от артефактов, при этом артефакты продолжают работать - пришлось сделать индикатор работы предметов. Подсветка секторов у клиентов может зависать. Если у класса клиента стейт смерти короче, чем стандартный думерский, то есть шанс уронить клиента. При некоторой комбинации флагов морфинга ( MoP был источником сего бага ) души убитых монстров остаются на сервере навсегда и приводят к лагам. | |
|
| |