Welcome to U.A.C. [O.S.A.]
login / register
Status: Guest
Архивы форума | iddqd.ru
Wolf 3D
ПравилаПравила ПоискПоиск
Баги и с чем их едят.
   Список разделов - Местечко мапперов и моддеров - Баги и с чем их едят.Ответить
АвторСообщение
Maddzi [B0S]
- Lance Corporal -
Next rank: = Lance Corporal = after 38 points
212

Doom Rate: 1.98
Ссылка на пост №1 Отправлено: 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
Next rank: Chief Petty Officer after 56 points
934

Doom Rate: 2.13
Ссылка на пост №2 Отправлено: 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];
}

Этой функции скармливаем прочитанное из массива в случае, если там должно было быть число а не строка. Она убирает лишнее смещение, если таковое имеет место быть.
1
Maddzi [B0S]
- Lance Corporal -
Next rank: = Lance Corporal = after 38 points
212

Doom Rate: 1.98
Ссылка на пост №3 Отправлено: 01.08.12 16:12:53

c4tnt

В ДБ2 этот спешл называется "Transfer Brightness Level", за который, собственно, я его и держал, а при использовании открылись некоторые нюансы, и поэтому я и решил, что он - баг. Так что мне простительно :)

Что до твоего бага - тут даже прокомментировать не смогу, не пробовал пока в этом разбираться, и для меня это выглядит как дремучий лес. Если у тебя есть единый гайд по array'ам и прочей чепуховине - поделись ссылочкой, пж, а то мне, гуманитарию, тяжко будет в этом разобраться :)
c4tnt
Chief Petty Officer
Next rank: Chief Petty Officer after 56 points
934

Doom Rate: 2.13
Ссылка на пост №4 Отправлено: 01.08.12 16:49:23

На счёт гайдов не знаю, разве что вот этот: http://zdoom.org/wiki/Arrays , могу перевести его если кому надо, только складировать мне особо некуда. Вроде была русская вики, в которую этот перевод можно было запилить, но что-то с ней не так нынче: http://wiki.doom.tc/index.php/%D0%97%D0%B0%D0%B...D0%B8%D1%86%D0%B0
1
c4tnt
Chief Petty Officer
Next rank: Chief Petty Officer after 56 points
934

Doom Rate: 2.13
Ссылка на пост №5 Отправлено: 12.08.12 16:12:43

Кстати, не дам теме засохнуть. Наверняка не все знают, но в сетевом режиме игры скуллтага при вызове клиентских скриптов в параметрах можно передавать только числа от 0 до 255. И ещё немного забавных багов скуллтага и, потенциально, его последователя и продолжателя: в сетевой игре если у тебя есть инвентарный предмет, который при использовании превратит тебя во что либо, то в скуллтаге он остаётся призраком в инвентаре. Можно исправить, перенеся морфинг в скрипт и добавив задержку. Кроме этого у клиентов при морфинге пропадает подсветка экрана от артефактов, при этом артефакты продолжают работать - пришлось сделать индикатор работы предметов. Подсветка секторов у клиентов может зависать. Если у класса клиента стейт смерти короче, чем стандартный думерский, то есть шанс уронить клиента. При некоторой комбинации флагов морфинга ( MoP был источником сего бага ) души убитых монстров остаются на сервере навсегда и приводят к лагам.
1
Страница 1 из 1Перейти наверх
   Список разделов - Местечко мапперов и моддеров - Баги и с чем их едят.

Игнор-лист
© iddqd.ru