Sidebar

NEWBSPGUY

Статус
Закрита.

karaul0v

Active member
06.05.10
350
В общем в оригинале bspguy крашится на некоторых картах, @Qwertyus вроде бы создавал багрепорты с какими-то картами.

И иногда получается что каждый раз когда жмешь Clean, удалялось часть VIS данных, на некоторых картах, ну и видимо это же проблема приводила к крашам.

Я какие-то случайные изменения в код внес и крашить перестало на них, и вроде как 0 байт стирается после повторной очистки, как и должно быть, но я так и не понял что я там сделал, по этому до сих пор не трогаю :) :):)
 

Qwertyus

Well-known member
13.08.09
1 474
65
48
  • Xash медаль
@Дядя Миша Во-первых, сейчас присутствует момент, что Ксаш не грузит карту вообще, если в ней есть превышение лимита по клипнодам. Т. е. типа считает, что такую карту просто грузить не нужно, т. к. она "неисправна". На старых билдах такого не было. Во-вторых, после оптимизации карта загружается, но в отдельных случаях там возникают глюки, которых не возникает под Голдсорсом.
я почему-то сталкивался с примерами того, что переставала правильно работать коллизия ворлдспавна и пропадали из вида точечные энтити (монстры), находившиеся на геометрии ворлдспавна
Проблемы с коллизией были как раз на картах с превышением клипнодов. После оптимизации Ксаш начинал их грузить, но с глюками, типа проваливания в пол. Ну, как бы не совпадал видимый браш и коллизия. Мог быть эффект, что пол, на котором игрок физически стоит, либо выше, либо ниже видимого.
Альтернативно, на других картах, без проблем с лимитом клипнодов, пропадали с карты энтити, например, монстры. При этом на карте был слышен звук, который эти монстры издают в режиме ожидания. Т. е. они как бы и есть, но непонятно где...
 
Команда форуму
VIP
28.03.10
15 566
315
83
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
сейчас присутствует момент, что Ксаш не грузит карту вообще, если в ней есть превышение лимита по клипнодам
Воу-воу-воу. Что значит "сейчас", если последний билд Ксаша был сделан летом 2019-го года?
 

Qwertyus

Well-known member
13.08.09
1 474
65
48
  • Xash медаль
@Дядя Миша Значит, уже давно присутствует. В билдах, доступных общественности :sneaky:. По всей видимости, как последствия введения расширенного стандарта BSP.
 

karaul0v

Active member
06.05.10
350
После экспорта и обратного импорта WAD, палитра получается рандомная, на 255 нет синего цвета. Я сделал это с halflife.wad и на 255 нет синего ни в одной { текстуре.
Есть вопрос, почему лестницы и т.п все равно прозрачные? синий по дефолту прозрачный?
Post automatically merged:

Кто подскажет какие текстуры в WAD вообще могут иметь прозрачность, только которые начинаются с { ?
 
Останнє редагування модератором:

Qwertyus

Well-known member
13.08.09
1 474
65
48
  • Xash медаль
@karaul0v Очень даже есть там синий цвет, вопрос в том, как экспортировать, видимо.
130279

Post automatically merged:

Например, если экспортировать в Wally в BMP, то палитра сохранится правильно. А при импорте в TGA палитра будет задом наперёд, синий цвет - первый, и остальные в обратном порядке.
 

Вкладення

Останнє редагування:

karaul0v

Active member
06.05.10
350
@karaul0v Очень даже есть там синий цвет, вопрос в том, как экспортировать, видимо.
Переглянути вкладення 130279
Post automatically merged:

Например, если экспортировать в Wally в BMP, то палитра сохранится правильно. А при импорте в TGA палитра будет задом наперёд, синий цвет - первый, и остальные в обратном порядке.
@karaul0v Очень даже есть там синий цвет, вопрос в том, как экспортировать, видимо.
Переглянути вкладення 130279
Post automatically merged:

Например, если экспортировать в Wally в BMP, то палитра сохранится правильно. А при импорте в TGA палитра будет задом наперёд, синий цвет - первый, и остальные в обратном порядке.
Я имею ввиду после экспорта из bspguy

File->Export->Wad->halflife.wad (сохраняет все текстуры в папку work)
а потом
File->Import->Wad->halflife.wad (загружает их обратно)
 
Команда форуму
VIP
28.03.10
15 566
315
83
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
синий по дефолту прозрачный?
последний по дефолту прозрачный.
Post automatically merged:

Я может непонятно объясняю, но содержимое палитры последнего цвета ВООБЩЕ НЕ УЧИТЫВАЕТСЯ.
Плевать что туда записано. Самое главное что в названии текстуры есть символ { в начале.
Это управляющий символ, который говорит загрузчику трактовать последний цвет в палитре как 0 0 0 0.
Надеюсь так понятнее.
 
Останнє редагування:

karaul0v

Active member
06.05.10
350
Да это понятно, сейчас уже обновил что бы в 32 бита png сохраняло, а потом прозрачный цвет обратно возвращало на 255 место, синий по умолчанию.

А я вообще не про это, я имел ввиду что у меня после пересборки WAD, в старой версии , синий цвет не ставился в самый конец да и вообще 255 номер не восстанавливался.
А в игре прозрачность работала. Я почему и подумал что это как-то странно все :)
Post automatically merged:

А все я понял почему работало, wad не в ту папку сохранялся :)
Post automatically merged:

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

Сделал, получилось куда компактнее, но почему-то работает не на 100%, некоторые фейсы как бы считаются невидимыми (выделены красным) хотя должны быть видимы (синие).

Вот видео демонстрация :
 
Останнє редагування модератором:
  • Haha
Reactions: Qwertyus
Команда форуму
VIP
28.03.10
15 566
315
83
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
но почему-то работает не на 100%
Да потому что там этот дьявольский сдвиг на еденицу. Я помню в своё время тоже сходил от него с ума.
Post automatically merged:

Вот оно что! Там виздата сдвинута! Вот правильная версия:
C:
    for( i = 0; i < numleafs; i++ )
    {
        if( CHECKVISBIT( visbytes, i ))
        {
            leafs[i+1];
        }
    }
 
Останнє редагування:
  • Wow
Reactions: karaul0v

karaul0v

Active member
06.05.10
350
Только ради бога не подгоняй результаты этой чудовищной тулзой. Вот жеш твари какую пакость удумали. В средние века их бы за это сожгли на костре. Потому что гладиолус.
Это про CRC опцию?

Ну меня давно попросили добавь я добавил мне то какая разница как эту функцию будут использовать, она по умолчанию отключена.
Там в общем можно ретекстуринг сделать ну или там слегка геометрию подправить, и при сохранении возьмутся все lump'ы кроме Entity и добавляет в конец данные для замены CRC на нужный.
То есть допустим автор выпустил карту, потом заметил на ней там текстуры неправильные или где-то освещение или тот же VIS поврежден, ну можно все это исправить и не делать название карты другое. И владельцем серверов не надо будет ее переименовывать.

То есть не надо будет
de_dust2_fix1
de_dust2_fix2 названия делать, а просто de_dust2 старое сохранить и ошибки при входе на сервер с новой картой не будет.

То что делают стены прозрачные это уже не моя забота, можно делать принудительно проверку через тот же Rechecker на полное соответствие CRC за пять минут amxx плагин наколдовать.
Post automatically merged:

Вот оно что! Там виздата сдвинута! Вот правильная версия:
И правда заработало :) Спасибо за подсказку :)

Теперь стало ясно что все очень плохо :)
Всмысле очистка ломает VIS данные конкретно, причем странно что в игре ничего не пропадает...
Как будто эти VIS данные вообще не используются в игре :)
Post automatically merged:

В оригинале ничего не ломает, но крашит на некоторых картах, надо наверное вернуться к оригиналу и посмотреть из-за чего могло крашить
Post automatically merged:

Надо придумать как эспортировать файлы для vis.exe что бы заново запускать для поврежденных карт.
 
Останнє редагування модератором:
Команда форуму
VIP
28.03.10
15 566
315
83
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
Всмысле очистка ломает VIS данные конкретно
Что ещё за мифическая очистка VIS? Впервые про такое слышу. Там единственное что можно сделать - это смержить виздату с уже имеющейся, если она вдруг совпадает. Но это и так все компиляторы делают.
Post automatically merged:

Ну ладно, ладно, может не все, но мой компилятор это точно делает:
C++:
    for( i = 0, data = g_uncompressed; i < leafnum; i++, data += g_bitbytes )
    {
        if( !memcmp( data, outbuffer2, g_bitbytes ))
        {
            g_dleafs[g_leafstarts[leafnum]+1].visofs = g_dleafs[i+1].visofs;
            c_reused++;
            return;
        }
    }
 

karaul0v

Active member
06.05.10
350
Что ещё за мифическая очистка VIS? Впервые про такое слышу. Там единственное что можно сделать - это смержить виздату с уже имеющейся, если она вдруг совпадает. Но это и так все компиляторы делают.
Post automatically merged:

Ну ладно, ладно, может не все, но мой компилятор это точно делает:
C++:
    for( i = 0, data = g_uncompressed; i < leafnum; i++, data += g_bitbytes )
    {
        if( !memcmp( data, outbuffer2, g_bitbytes ))
        {
            g_dleafs[g_leafstarts[leafnum]+1].visofs = g_dleafs[i+1].visofs;
            c_reused++;
            return;
        }
    }
Я так понял это сделано что бы лимиты обходить, обрезаются ненужные данные у всех объектов на карте.
Ну то есть очистка не именно VIS, а удаляются все неиспользуемые структуры, ненужные HULL'ы и прочее.
А после этого появляется неиспользуемые VIS данные, вот они и удаляются.


Сейчас в bspguy есть функция PRINT_HULL , и это почти все нужные данные для .PRT файла содержит, значит можно восстановить PTR файл хотя бы похожий на оригинал ?:)

Я так понял там записывается

1. строка количество LEAF
2. хз что количество порталов кудато?))
потом единички по количеству LEAF
А потом перебираются эти порталы и дальше я запутался :)

Надо еще подумать :(
Post automatically merged:

Кажется пофиксил сбой VIS после оптимизации.
Но на картах: https://github.com/wootguy/bspguy/issues/78
Кнопка оптимизации добавляет 2 кбайта VIS данных, заполненных 0xFF байтами, оригинал версия - падала вообще после нажатия CLEAN :)

Лучше заполнять пространство 0xFF байтами или 0x00 ?

Кстати на счет размера ROW, какой код правильный будет (всмысле надо еденицу эту убирать одну?)

Код:
    int oldVisLeafCount = oldLeafCount;
    int newVisLeafCount = (bsp_header.lump[LUMP_LEAVES].nLength / sizeof(BSPLEAF));

    unsigned int oldVisRowSize = ((oldVisLeafCount + 63) & ~63) >> 3;
    unsigned int newVisRowSize = ((newVisLeafCount + 63) & ~63) >> 3;
или

Код:
    int oldVisLeafCount = oldLeafCount - 1;
    int newVisLeafCount = (bsp_header.lump[LUMP_LEAVES].nLength / sizeof(BSPLEAF)) - 1;

    unsigned int oldVisRowSize = ((oldVisLeafCount + 63) & ~63) >> 3;
    unsigned int newVisRowSize = ((newVisLeafCount + 63) & ~63) >> 3;
Post automatically merged:

@Qwertyus на тех картах теперь так

первое нажатие CLEAN. Срабатывает защита от buffer overrun, о которой я писал выше, и которая нигде не работает как надо:)

130282

второе нажатие CLEAN

130281

Post automatically merged:

То есть на тех картах, VIS данные изначально поврежедены каким-то компилятором, Или же тем же самым bspguy.
После проверки через новую фичу VIS DEBUGGER, VIS рабочая на одной и второй карте.
Может там VIS данные нестандартные, не знаю :(
Post automatically merged:


Какое-то описание формата печальное, думал хоть какие-то подробности есть :)
Post automatically merged:

@Дядя Миша

Я вот отковырял какую-то карту XashXT_081.rev2\xash\sponza.pak\maps\sponza.bsp

Там пишет BSP версия 30 как у любой hl1 карты, а как определить что нужно использовать int клипноды если есть несколько вариантов, к примеру просто клипноды перегружены?, как понять что нужно именно 32 битные клипноды загружать?
Post automatically merged:

Вот например на ней после очистки удалено (Удаление данных которые никак не используются в игре вообще):
Deleted 684 planes
Deleted 3187 clipnodes
Deleted 48.65 KB of VIS data
После оптимизации удалено (Удаление данных которые не обязательны для работы карты):
Deleted 3325 planes
Deleted 10197 clipnodes
130283

130284
 
Останнє редагування модератором:
Команда форуму
VIP
28.03.10
15 566
315
83
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
значит можно восстановить PTR файл хотя бы похожий на оригинал ?
В Кваке точно можно, из порталов. В халфе - ну как повезёт. Уж слишком много вариаций построения BSP. У меня получалось раз через раз. Гиблое это дело.
Лучше заполнять пространство 0xFF байтами или 0x00 ?
0xFF - это полная видимость, 0x00 - ничего не видно. Или ты про что?

а как определить что нужно использовать int клипноды если есть несколько вариантов, к примеру просто клипноды перегружены?, как понять что нужно именно 32 битные клипноды загружать?
Элементарно. Если кол-во клипнодов превысило 32767 штуки - это расширенные клипноды.
Что значит - перегружены? :oops:
Удаление данных которые не обязательны для работы карты
Угу, а теперь запусти эту карту под ксашем и посмотри что из этого получится. Этот оптимизатор удаляет данные, которые не нужны самому BSPGuy. С этим трудно спорить.
 

karaul0v

Active member
06.05.10
350
Элементарно. Если кол-во клипнодов превысило 32767 штуки - это расширенные клипноды.
Что значит - перегружены? :oops:
ну вот карты которые я выше кидал, у них клипнодов больше чем 32767, но они не 32битные и версия 30, может это которые Arguire или как там их?
или возможно компилятор создал слегка больше клипнодов чем надо...


Post automatically merged:

0xFF - это полная видимость, 0x00 - ничего не видно. Или ты про что?
А спасибо понял. Тогда думаю лучше 0xFF потому что если данные были поврежедены, лучше что бы было видно все после восстановления :)
Post automatically merged:

Угу, а теперь запусти эту карту под ксашем и посмотри что из этого получится. Этот оптимизатор удаляет данные, которые не нужны самому BSPGuy. С этим трудно спорить.
да нет все будет работать, точнее должно, и еще там в настройках есть списки, то есть можно задавать списки сущностей которые можно безнаказанно обрезать :)

Если монстров нет то хулл'ы для монстров удаляются и так далее.
Post automatically merged:

@Дядя Миша


А там случаем не ошибка ? В оригинале не может быть ровно 32767 клипнодов? Может надо > MAX_MAP_CLIPNODES_HLBSP
Post automatically merged:

Угу, а теперь запусти эту карту под ксашем
Да карта не сохраняется даже при обычном сохранении, пол карты кудато теряется, хотя потом обратно открывается в bspguy, какая-то магия или фигня не понятная
А версия BSP обычная 30тая стоит в заголовке :(
 
Останнє редагування модератором:
Команда форуму
VIP
28.03.10
15 566
315
83
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
ну вот карты которые я выше кидал, у них клипнодов больше чем 32767
Так НЕ БЫВАТ. В халфе предельный лимит на клипноды - 32767. Какую карту ты кидал выше? Спонзу?
Вот для нее статистика.
Object names Objects/Maxobjs Memory / Maxmem Fullness
------------ --------------- --------------- --------
entities [variable] 15178/1048576 ( 1.4%)
planes 16391/65536 327820/1310720 (25.0%)
textures [variable] 400/33554432 ( 0.0%)
vertexes 23275/65535 279300/786420 (35.5%)
visibility [variable] 1338441/16777216 ( 8.0%)
nodes 15650/32767 375600/786408 (47.8%)
texinfo 10695/65535 427800/2621400 (16.3%)
faces 20239/65535 404780/1310700 (30.9%)
lightmaps [variable] 2182980/33554432 ( 6.5%)
clipnodes 35814/32767 429768/393204 (109.3%) SIZE OVERFLOW!!!
leafs 7408/32767 207424/917476 (22.6%)
markfaces 24395/65535 48790/131070 (37.2%)
edges 43903/1048576 175612/4194304 ( 4.2%)
surfedges 82515/2097152 330060/8388608 ( 3.9%)
models 27/768 1728/49152 ( 3.5%)
deluxmaps [variable] 2182980/33554432 ( 6.5%)
faceinfos 1/8192 22/180224 ( 0.0%)
Это именно ксашевая карта с расширенными 32-х битными клипнодами. Я понятия не имею что там BSPGuy мог соптимизировать. Может он 32-х битные клипноды ошибочно принял за 16-битные?
но они не 32битные и версия 30
А как ты определил, что клипноды - не 32-х битные?
В оригинале не может быть ровно 32767 клипнодов?
Может конечно, только 32-х битные клипноды сильно больше по размеру, поэтому ошибиться там невозможно.
А версия BSP обычная 30тая стоит в заголовке
Правильно, это мой BSP30ext формат. Там еще 12 дополнительных лумпов, которые BSPGuy вообще игнорирует. А ведь есть еще кастомный формат HLFX 0.6...
Post automatically merged:

А версия BSP обычная 30тая стоит в заголовке
Это вообще специально сделано, ради совместимости. Как раз для того чтобы эти расширенные карты можно было смотреть в древних халфовских вьюверах. Но ктож предполагал, что новые вьюверы там еще будут что-то "оптимизировать".
 
  • Like
Reactions: karaul0v

Qwertyus

Well-known member
13.08.09
1 474
65
48
  • Xash медаль
Изредка в модах попадаются карты с превышением клипнодов. Которые, насколько я понимаю, не ксашевскими компиляторами собирались. Например, есть мод 2012 года
Hazardous Materials Episode 2. Там несколько карт скомпилены с превышением. Предполагаю, что какой-то модернизированный компилятор использовали, но явно не Ксашевский. И эти карты работают под Голдсорсом.
Post automatically merged:

Есть, правда, подозрение, что превышение клипнодов привело к тому, что некоторые объекты карты потеряли физическую плотность.
Post automatically merged:

И, кстати, BSPGuy падает на оптимизации данных карт ( hm_ep2_l6a, hm_ep2_l8 ).
 
Останнє редагування:

karaul0v

Active member
06.05.10
350
Так НЕ БЫВАТ. В халфе предельный лимит на клипноды - 32767. Какую карту ты кидал выше? Спонзу?
Вот для нее статистика.


Правильно, это мой BSP30ext формат. Там еще 12 дополнительных лумпов, которые BSPGuy вообще игнорирует. А ведь есть еще кастомный формат HLFX 0.6...
ну так надо хоть как-то помечать отличия в версиях что бы другие не мучались потом делая костыли какие-то ))))
Post automatically merged:

Я понятия не имею что там BSPGuy мог соптимизировать. Может он 32-х битные клипноды ошибочно принял за 16-битные?
сейчас нет поддержки 32 битных, я сделал но не опубликовал ещё, нет клипноды целые, я выше скрин кинул там видно что они не повреждены, просто делается редирект на другой hull, например нет "больших монстров?" удаляется хулл LARGE и перенаправляется на другой и так далее. Минус один хулл -30% клипнодов, в этом случае 10к.
Post automatically merged:

Мне кажется автор программы очень хорошо в этом разбирался, по уму все сделано, кнопка "очистка" отмечает все данные которые используются, и удаляет остальные после чего все применяет remap оффсеты к оставшимся. К примеру если нажать кнопку "очистить" то с карты удаляется 700 planes и 3000 clipnodes. Это значит что ни одна из goldsrc структур их не использует. Кнопка "оптимизация" берет списки классов сущностей из настроек, там разные списки, и по ним удаляет или переназначает ненужные данные ну и потом снова делает "очистку".
Post automatically merged:

Там много вариантов оптимизации, самый простой к примеру сущность не требует столкновения, все хуллы этой сущности удаляются. И т.п, я могу ошибаться т.к не особо ознакамливался с этими алгоритмами оптимизации, но факт в том что оно работает. И настраивается.
 
Останнє редагування модератором:
Команда форуму
VIP
28.03.10
15 566
315
83
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
ну так надо хоть как-то помечать отличия в версиях
Это специальный формат, который пытается выдержать совместимость с голдсорсом, пока лимиты окончательно не нарушены. А потом при компиляции выдаёт сообщение, что под голдсорсом карта уже не заведётся.
 

karaul0v

Active member
06.05.10
350
ну я думаю если клипноды 32 битные то она точно не заведется, плюс карта освещения какаято убитая если попытаться под голдсоурсом завести, ну смысл в том что сложно делать поддержку таких форматов, если они никак не дают знать о себе. Дополнительные Lump'ы можно о них почитать где-то, или ничего не задокументировано? Ну я думаю кому-нибудь может пригодится поддержка таких карт, есть ли вообще какие-то популярные моды на ксаше?
 
Статус
Закрита.

Game Server

Доноры Красавчики

Користувачі онлайн

Немає користувачів онлайн.