Sidebar

NEWBSPGUY

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

karaul0v

Active member
06.05.10
350
Выравнивание по 4. Очень критичная штука. Некоторые программы получают оффсет на палитру с конца файла, причём всегда имеют в виду, что выравнивание - есть.
Так вот я про это и пытался узнать, эти 2 байта дополнительных (выравнивание каждой текстуры) не делается в встроенных в карту текстурах?
 
Команда форуму
VIP
28.03.10
15 566
315
83
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
то например marksurfCount и surfedgeCount количество изменится
Ты немного не понял. Выровненный размер не записывается в lump_t. Лишние байты записываются в сам bsp.
Post automatically merged:

Пример как это делает компилятор
C++:
void AddLump( int lumpnum, void *data, int len )
{
    dlump_t *lump = &header->lumps[lumpnum];
    lump->fileofs = tell( wadfile );
    lump->filelen = len;
    SafeWrite( wadfile, data, (len + 3) & ~3 );
}
 
  • Like
Reactions: karaul0v

karaul0v

Active member
06.05.10
350
Ты немного не понял. Выровненный размер не записывается в lump_t. Лишние байты записываются в сам bsp.
Post automatically merged:

Пример как это делает компилятор
C++:
void AddLump( int lumpnum, void *data, int len )
{
    dlump_t *lump = &header->lumps[lumpnum];
    lump->fileofs = tell( wadfile );
    lump->filelen = len;
    SafeWrite( wadfile, data, (len + 3) & ~3 );
}
А это легко, сделаю, так а с текстурами что, я уже запутался, надо 2 байта после каждой текстуры (выравнивать)? или после палитры уже ничего нет?

Или это только в WAD нужно каждую текстуру выравнивать по 4 а в встроенных после палитры ничего нет?
 
Останнє редагування модератором:

karaul0v

Active member
06.05.10
350
Вроде как поисправлял косяки с вылетами и выравниванием, и добавил поддержку каких-то карт где зачем-то перепутаны PLANES и ENTITIES
 

karaul0v

Active member
06.05.10
350
Начал добавлять конвертер карт, пока что не проверенно, и добавлено только 2 варианта (Half Life/Blue Shift)

130382

Post automatically merged:

@Дядя Миша если можно есть вопрос :) 29 формат не поддерживает палитру в встроенных текстурах?
Если между 30 и 29 сохранять, то нужно преобразовать все текстуры в палитру Quake и обратно?
 
Останнє редагування модератором:
Команда форуму
VIP
28.03.10
15 566
315
83
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
29 формат не поддерживает палитру в встроенных текстурах?
Не поддерживает. Впрочем Ксаш вообще не смотрит на номер версии, как я уже и говорил - ориентируется по размеру текстуры, есть там палитра или нету. А преобразовать халфовские текстуры в квейковскую палитру проблематично. Будет деградация цветов. Сам преобразователь довольно простой, но качество станет ужастным.
 

karaul0v

Active member
06.05.10
350
Не поддерживает. Впрочем Ксаш вообще не смотрит на номер версии, как я уже и говорил - ориентируется по размеру текстуры, есть там палитра или нету. А преобразовать халфовские текстуры в квейковскую палитру проблематично. Будет деградация цветов. Сам преобразователь довольно простой, но качество станет ужастным.
Ну у меня в квантизаторе можно подставлять палитру нужную, и это работает даже :)

Код:
    Quantizer* tmpCQuantizer = new Quantizer(256, 8);
    tmpCQuantizer->SetColorTable(palette, 256); // установить свою палитру, если пропустить этот участок кода то остается новая на 256 цветов
    tmpCQuantizer->ApplyColorTable((COLOR3*)data, width * height); // data исходное изображение
    delete tmpCQuantizer;
// после чего в data будет уже преобразованное в другую палитру изображение
Просто уточнил, вдруг кто-то из 30 версии захочет сделать 29 или там bsp2
 

karaul0v

Active member
06.05.10
350
Добавил больше форматов карт в конвертер.

130383


Галкой выделен текущий формат карты.

Там еще 2 пункта есть но они скрыты если не превышен лимит клипнодов (BROKEN CLIPNODES)


И починил конвертер colored <-> monocrome lightmap.


@Дядя Миша единственное что не знаю как lightmap в xash формат преобразовывать
 
Останнє редагування модератором:
Команда форуму
VIP
28.03.10
15 566
315
83
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
Ну у меня в квантизаторе можно подставлять палитру нужную
Оверкилл. Выбор цветов из уже готовой палитры это весьма простая задача, типа такого:
C++:
short R_LookupColor( byte r, byte g, byte b )
{
    int    i, best;
    float    diff, bestdiff;
    float    rf, gf, bf;

    bestdiff = 999999;
    best = 65535;

    for( i = 0; i < 256; i++ )
    {
        rf = r - clgame.palette[i].r;
        gf = g - clgame.palette[i].g;
        bf = b - clgame.palette[i].b;

        // convert color to monochrome
        diff = rf * (rf * 0.2) + gf * (gf * 0.5) + bf * (bf * 0.3);

        if ( diff < bestdiff )
        {
            bestdiff = diff;
            best = i;
        }
    }

    return best;
}
Но раз квантизатор умеет, то пофигу.

Добавил больше форматов карт в конвертер.
Афтар маладец за проделаную работу! :beer:
Post automatically merged:

Вообще у тебя там логические ошибки:
1. Старый 32-х битный формат для квейка называется не 2BSP, а 2PSB. Кто-то не понимал как устроен Little-Endian и записал название кверхногами.
2. Квака не понимает цветное освещение внутри карты, единственный кто сможет это загрузить - Ксаш
Там освещение внешнее хранится в файликах qlit, поэтому его лучше записывать туда, а не в карту.
Post automatically merged:

не знаю как lightmap в xash формат преобразовывать
В каком смысле? Обычная цветная лайтмапа там, как в халфе. Или ты про что?
 
Останнє редагування:
  • Like
Reactions: karaul0v

karaul0v

Active member
06.05.10
350
В каком смысле? Обычная цветная лайтмапа там, как в халфе. Или ты про что?
Ну я открывал карту какую-то из ксаша, очень страшная лайтмапа получалась(ребра и полосы какие-то, я кажется выше кидал скрин)
sponza.bsp или как там карта называлась, сейчас не могу написать точно название)
Post automatically merged:

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

А как цветное хранится в отдельных файлах, оффсеты в фейсах надо изменять или оно как-то само подхватывает цвета?


Ещё забыл текстуры конвертировать в палитру quake и обратно.
 
Останнє редагування модератором:
Команда форуму
VIP
28.03.10
15 566
315
83
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
очень страшная лайтмапа получалась(ребра и полосы какие-то, я кажется выше кидал скрин)
ну так в ксаше разрешение лайтмапы может меняться. Там долго объяснять, смотри код движка.
Если что непонятно - спрашивай.
сам же писал мне что для этого и добавил детект цветности?
Детект цветности я добавил для поддержки карт из HL:Alpha. Но квака такие карты не сможет нормально загрузить.

А как цветное хранится в отдельных файлах, оффсеты в фейсах надо изменять или оно как-то само подхватывает цвета?
Нет, ничего абсолютно менять не надо, движок там сам на три умножает, если грузит внешний файл. Там спереди 8 байт - идентификатор QLIT и следующий за ним uint - номер версии 1.
А потом дата с цветными лайтмапами, как если бы она лежала в LUMP_LIGHTING.
Post automatically merged:

Может тебе долго будет разбираться что там к чему в Ксаше, дам подсказку.
C++:
typedef struct
{
    float    vecs[2][4];        // texmatrix [s/t][xyz offset]
    int    miptex;
    int    flags;
} dtexinfo_t;
Это исходная структура. Реально поле flags использует всего 1 бит. Т.е. 30 бит болтаются без дела.
Я распилил переменную flags на две 16 битных, вот так:
C++:
typedef struct
{
    float    vecs[2][4];        // texmatrix [s/t][xyz offset]
    int    miptex;
    short    flags;
    short    faceinfo;            // -1 no face info otherwise dfaceinfo_t
} dtexinfo_t;
На совместимость это никак не повлияло. Теперь новая переменная faceinfo хранит в себе записанный номер дополнительных данных в расширенных лумпах BSP30ext. Обращается в LUMP_FACEINFO
к структуре
C++:
typedef struct
{
    char        landname[16];    // name of decsription in mapname_land.txt
    unsigned short    texture_step;    // default is 16, pixels\luxels ratio
    unsigned short    max_extent;    // default is 16, subdivision step ((texture_step * max_extent) - texture_step)
    short        groupid;        // to determine equal landscapes from various groups, -1 - no group
} dfaceinfo_t;
landname и groupid - это для ландшафтов, тебе это не нужно.
max_extent - это использует компилятор.
texture_step - вот здесь и хранится разрешение лайтмапы. Дефолтное в халфе и кваке равно 16.
Чем ниже число - тем выше разрешение, т.к. оно определяет соотношение люкселей к текселю.
16 - это значит что на квадрат 4х4 текселя (то есть текстурных пикселей) приходится всего один люксель (т.е. пиксель лайтмапы). 1 - минимально возможное значение, когда каждому текселю соответствует 1 люксель и тени становятся чёткие как в дуум3. Дальше в движке в mod_bmodel.c ищи обращение к переменным texture_step и думаю сообразишь что к чему.
 
Останнє редагування:
  • Like
Reactions: karaul0v

karaul0v

Active member
06.05.10
350
Спасибо за инфу. То есть если нет расширенных лумпов, только тогда ксаш использует обычную лайтмап?

Если конвертация карт из ксаша в другие не особо нужна, то попытаюсь сделать хотя бы нормальное отображение лайтмапы
 

karaul0v

Active member
06.05.10
350
Добавил экспорт .lit
Post automatically merged:

Добавил импорт .lit файла

@Дядя Миша а надо поддержку каких-то IBSP файлов добавлять? Или они не используются / нельзя преобразовать в другой формат?
 
Останнє редагування модератором:
Команда форуму
VIP
28.03.10
15 566
315
83
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
То есть если нет расширенных лумпов, только тогда ксаш использует обычную лайтмап?
Расширенные лумпы в BSP30Ext есть ВСЕГДА! Даже если у лайтмапы дефолтное разрешение. Будет как минимум один faceinfo где и будет записано что разрешение 16.
Если конвертация карт из ксаша в другие не особо нужна
BSP30ext не получится конвертировать в другие форматы, т.к. они не имеют его возможностей.
К тому же он сам по себе так устроен, чтобы его могли загружать любые движки, даже не подозревая о том, что формат - расширенный.

а надо поддержку каких-то IBSP файлов добавлять?
IBSP это форматы из Quake2 и Quake3.
Post automatically merged:

Я вот не помню, с тобой мы обсуждали или с Альбатроссом, но BSP30ext как раз и следует детектировать по сигнатуре XASH, которая следует сразу за dheader_t. Она там есть вообще всегда, даже если никакие из возможностей BSP30ext не используются.
 

karaul0v

Active member
06.05.10
350
Это другое семейство движков.
Понял, а там формат достаточно сильно отличается от нормального BSP? Ну всмысле если лишнее убрать я его могу легко загрузить, или там слишком отличается и нельзя легко загрузить как обычный BSP?
 
Команда форуму
VIP
28.03.10
15 566
315
83
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
Откуда же я знаю что ты имеешь в виду под "сильно отличается"?
И зачем тебе их грузить вообще?
 
Статус
Закрита.

Game Server

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

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