nemyax писал: им вообще до одного места твоя этническая принадлежность.
Русский это не просто этническая принадлежность. Русский - это мир!
Добавлено 06-03-2024 в 12:28:
Но вообще это очень наивно считать, что на западе людям до одного места этническая принадлежность... Хотя да, вслух об этом рассуждать не любят. Для русских в последние пару лет сделали исключение, да и то не все.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro
Нет вроде, но я их почти не вижу - я ж в Торонто живу.
Искать в Торонто коренных канадцев - это всё равно что в Москве искать коренных москвичей. И я не скажу, что это плохо!
XaeroX писал: Цитата:
Pathos's model format requires a custom level editor, and currently there are no alternatives, other than the custom Hammer I use, which was based on the 2003 leak code. There have been previous examples of people releasing custom Hammer binaries (Hammer++, and afaik JACK) and Valve not really caring
Какой же нехороший человек, пишет такое.
Цитата:
-- А почему апдейте халфы для новых карт юзали бесплатную версию джека?
-- А зачем им платить за свой редактор?
Вот она плата за схожесть с хаммером, чтобы потом тебя обвинили в плагиате хаммера
По большей части согласен с автором, в своих проектах лучше как можно сильнее абстрагироваться от валвовского контента, форматов и хлсдк.
XaeroX
Ну ты так говоришь будто там ходят за тобой толпой и тычат пальцем словно прокаженный. Хотя как я понял весь хейт идёт разве что от выходцев из СНГ которые живут теперь на западе.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Crystallize писал: Это о том что игру на Ксаше нельзя релизить в Стиме?
Я не знаю, можно или нельзя. Считается что нельзя. Но те, кто пытаются сделать игру на Ксаше, первым делом уведомляют об этом Вальву и она им конечно же говорит - нет. А вот так, чтобы уже сделали и выложили - типа всё норм, об этом мне ничего не известно. Может быть уже и есть прецеденты.
Crystallize писал:
Это о том что игру на Ксаше нельзя релизить в Стиме?
Если избавишься от халфовских зависимостей то никто ничего предъявить не сможет.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Ну чтож, давайте поизучаем структуру. Для начала - ресурсы. Я буду дополнять пост по мере изучения.
Спрайты - халфовские, 100% совместимые. Модели - открываются в халфовском модельвьювере, однако ничего не показывают. Рядом с каждой моделью файлик с расширением vbm, я полагаю там лежит то, что параноя строила на лету - VBO-ready массив.
Так же есть очень забавная система материалов с расширением pmf.
Вот например содержимое gib_placeholder.pmf
C++ Source Code:
1
$alias
2
{
3
$scriptfile models/gibs/gib_placeholder.pmf
4
}
Очевидно идёт отсылка на другой скрипт. Открываем его:
C++ Source Code:
1
$texture
2
{
3
$texture diffuse models/gibs/gib_placeholder.tga
4
}
Но возможно эти скрипты позволяют куда больше комманд, чем тут прописано. Увидим. Так же отмечу, что в комплекте с движком идут только модели гибсов почему-то.
Из папки docs можно узнать всякое. Например, что движок поддерживает лицевую анимацию (скорее всего взята из Source).
Модельки из халфы - не поддерживаются совсем. Они должны иметь файлик vbm вот этот. Но зато поддерживаются карты из халфы, а так же карты собственного нативного формата, компилятор основан на VHLT.
Текстуры должны быть уложены по папкам, декали в textures\decals, небо в textures\sky, каустики в textures\general
Так же в комплекте идёт какая-то мощная система партиклей, но это как раз неудивительно. Программисты, научившиеся писать код боле-мене нормально первым делом почему-то пишут именно партикл-систему.
Даётся описание системы материалов, оно довольно простое:
Ну и так же есть параметры для кубемап, копии экрана, бампа, глосса и детальной текстуры. И стандартный набор параметров, типа $nodecal, $nostepsound. Кастомные шейдеры хранятся в формате .bss, который дико долго грузится и компилируется, что хорошо заметно на демонстрационных видео. Про модели и редактор уровней информации немного - там что-то про утёкшие исходники беты из-за чего исходники ни компилятора моделей ни редактора уровней не могут быть опубликованы.
То есть вроде как человек обещал лицензионно чистый код, однако у него там минимум две мины заложены. Возможно в дальнейшем он всё это полностью перепишет. Например на Qt (я про редактор).
Добавлено 07-03-2024 в 11:11:
Теперь приступим к изучению ресурсов в папке pathos.
Главный файл мода называется gameinfo.cfg
Внутри вот такое:
C++ Source Code:
$title "Pathos Engine"
$startmap "entitytest1"
$stencilbits 0
Интересно, причём тут стенсил вообще.
В папке textures\decals лежат декали из паранои. Кажется со второй, но может и из первой тоже есть. Впрочем, другие декали там тоже присутствуют. (Главное что мой ЕДОДОЙ не упёрли, вот за это я бы реально предъявил).
Система материалов не поддерживает анимацию текстур, поэтому анимированные кадры лежат в отдельных текстовых файликах:
C++ Source Code:
1
{
2
"caustics/caustics0.dds"
3
"caustics/caustics1.dds"
4
"caustics/caustics2.dds"
5
"caustics/caustics3.dds"
6
"caustics/caustics4.dds"
7
"caustics/caustics5.dds"
8
"caustics/caustics6.dds"
9
"caustics/caustics7.dds"
10
}
Чем-то напомнило билды сталкера.
Модели равномерно размазаны по куче папок. Где-то текстуры, где-то сами модели, где-то материалы. Собрать всё это в кучку и поделиться вероятно будет так же неудобно как и в сорсе. Текстуры партиклей - из паранои, но там они тоже откуда-то, уже не помню откуда. Может из Quake 2 Evolved, а может и нет.
Скайбоксы идут порубленными на шесть сторон, автор не осилил отрендерить скайбокс, собранный в одну dds-кубемапу. Ну кстати не такая уж и тривиальная задачка.
Материалы для мира в основном собраны в ваде. На каждый материал видимо требуется отдельный файл. Поэтому в папке textures\world\pathos лежит один wad-файл и 155 pmf файлов, среди которых замечена текстура от нашего FiEctro, а именно {cj_fence.pmf - да-да, тот самый заборчик, который он когда-то делал лично для меня.
WAD-файлы самые обычные, HL-совместимые.
В кредитсах про меня ни слова, про ФиЭктру, разумеется тоже. Но упомянут BUzer. Разумеется про Вальву, у которой попячен Хаммер - тоже ни слова. Ладно, идём дальше.
materialdefs.txt - это к слову явное отражение моих идей из P2.
Можно сравнить
Paranoia 2: Savior
Ну да, чуть-чуть добавили параметров, но внутренняя логика нарушена. Пенетрация и рикошет должны быть в настройках оружия, а не материалов. В настройках материалов тогда уж должна быть плотность.
Папка scripts\expressions вероятно содержит лицевую анимацию. Я особо не разбирался как оно там в хл2 устроено, так что ничего сказать не могу.
Шейдеры в файликах .bss. Очень неприятный и некрасивый код, практически каша. Примеры
C++ Source Code:
1
$global_determinator texture 0 1
2
$global_determinator fog 0 1
3
$shader_vertex $begin
4
#version 130
C++ Source Code:
1
void main()
2
{
3
$branch texture == 1
4
$begin
5
ps_texcoord = in_texcoord;
6
$end
7
8
ps_color = in_color;
9
vec4 position = in_position*modelview;
10
11
$branch fog == 1
12
$begin
13
ps_vertexpos = position.xyz;
14
$end
15
16
gl_Position = position*projection;
17
}
C++ Source Code:
1
$determinator rectangle 0 1
2
$begin
3
#version 130
4
#extension GL_ARB_texture_rectangle : enable
5
$branch texture == 1
6
$begin
7
$branch rectangle == 0
8
$begin
9
uniform sampler2D texture0;
10
$end
11
$branch rectangle == 1
12
$begin
13
uniform sampler2DRect rectangle0;
14
$end
15
$end
Очевидно пытались сделать убер-шейдеры, но налажали с синтксисом.
Прикол в том, что это шейдер basicdraw, то есть самый простейший из всех. Так же есть файлы csd, что-то вроде кэша. Но уже разобранные по бранчам. Файлы бинарные но легко открываются в блокноте.
C++ Source Code:
1
void main()
2
{
3
ps_color = in_color;
4
vec4 position = in_position*modelview;
5
6
gl_Position = position*projection;
7
}
То есть вот тут оно уже читабельное, как видите. Ну и наконец есть файлы BSD - там уже NVidia ASM. Из-за того кэши лежат рядом с исходниками образуется знатная каша. Папки cache - нет.
Т.е. вручную удалить этот кэш будет проблмематично.
Из забавного. Есть файлик vbmrender.bss, который весит 20 килобайт.
А вот закэшированный с его помощью шейдер весит знаете сколько? Держитесь крепче за стул - ТРИДЦАТЬ МЕГАБАЙТ. Ну вот и ответ, почему они так чудовищно долго грузятся.
Внутри вот такое:
То есть тут очевидно какой-то злокачественный комбинаторный взрыв.
Вот ещё любопытное
C++ Source Code:
1
$invalid_state 2 chrome 1 1 shadertype 2 11
2
$invalid_state 2 chrome 1 1 shadertype 13 17
3
$invalid_state 2 num_lights 1 6 shadertype 3 14
4
$invalid_state 2 num_lights 1 6 shadertype 16 17
5
$invalid_state 2 alphatest 1 2 shadertype 3 11
6
$invalid_state 2 alphatest 1 2 shadertype 13 13
7
$invalid_state 2 alphatest 1 2 shadertype 15 15
8
$invalid_state 2 alphatest 1 2 chrome 1 1
9
$invalid_state 2 specular 1 1 shadertype 7 12
10
$invalid_state 2 specular 1 1 shadertype 14 14
11
$invalid_state 2 specular 1 1 shadertype 16 17
12
$invalid_state 2 specular 0 0 shadertype 15 15
13
$invalid_state 2 luminance 1 1 shadertype 3 17
14
$invalid_state 2 bumpmapping 1 1 shadertype 7 14
15
$invalid_state 2 bumpmapping 1 1 shadertype 16 17
Что здесь вообще происходит - понятно только автору. Как это масштабировать? Хидеров нет, в них невозможно вынести общие функции, поэтому в каждом bss файлике они дублируются. Плохо.
Теперь наконец-то можно перейти к исходникам.
Добавлено 07-03-2024 в 12:02:
Теперь собственно, по исходникам. Начнём с компиляторов VHLT.
Изменения, как я понял чисто косметические:
C++ Source Code:
1
typedefstruct
2
{
3
int id;
4
int version;
5
lump_t lumps[HEADER_LUMPS];
6
}
7
dheader_t;
Здесь добавлен идентификатор.
C++ Source Code:
1
typedefstruct
2
{
3
int planenum;
4
int children[2]; // negative numbers are -(leafs+1), not nodes
5
short mins[3]; // for sphere culling
6
short maxs[3];
7
unsignedint firstface;
8
unsignedint numfaces; // counting both sides
9
}
10
dnode_t;
11
typedefstruct
12
{
13
int planenum;
14
int children[2]; // negative numbers are contents
15
}
16
dclipnode_t;
17
typedefstruct
18
{
19
unsignedint v[2]; // vertex numbers
20
}
21
dedge_t;
22
typedefstruct
23
{
24
unsignedint planenum;
25
int side;
26
27
int firstedge; // we must support > 64k edges
28
int numedges;
29
int texinfo;
30
31
// lighting info
32
byte styles[MAXLIGHTMAPS];
33
int lightofs; // start of [numstyles*surfsize] samples
34
}
35
dface_t;
Тут часть переменных сделаны 32-х битными. Вот в принципе и все отличия от HLBSP. Сорцы самих компиляторов я не копал - лень, но почему-то уверен, что других отличий там и нет. В компиляторах единицы разбираются на самом деле. Обычно вот то, что я привёл - это максимум что меняют.
vbmconvert основан на переписанном коде из P2, который генерит VBO, автор его значительно переписал и расширил, но я же вижу.
Сам формат VBM ничего особенного из себя не представляет, это просто вариация на тему кэша из Paranoia 2. Но да, автор там добавил флексы, которые сохранил в текстуру и грузит прямо в вертексном шейдере.
Это хорошо. Насколько я помню Source это делал на CPU, что давно уже неактуально.
C++ Source Code:
#define STUDIO_MF_SMALLFOV 1024 // Use a small FOV(view models)
Помоему логичнее было бы пометить вью-модели, т.е назвать флаг MF_VIEWMODEL, поскольку укороченный FOV только им и нужен. Опять логика проседает, ну ладно.
C++ Source Code:
1
enum movetype_t
2
{
3
MOVETYPE_NONE = 0,
4
MOVETYPE_WALK,
5
MOVETYPE_STEP,
6
MOVETYPE_PUSHSTEP,
7
MOVETYPE_FLY,
8
MOVETYPE_TOSS,
9
MOVETYPE_PUSH,
10
MOVETYPE_NOCLIP,
11
MOVETYPE_BOUNCE,
12
MOVETYPE_FOLLOW
13
};
14
15
enum rendermode_t
16
{
17
RENDER_NORMAL = 0,
18
RENDER_TRANSCOLOR,
19
RENDER_TRANSTEXTURE,
20
RENDER_TRANSGLOW,
21
RENDER_TRANSALPHA,
22
RENDER_TRANSADDITIVE
23
};
24
25
enum solid_t
26
{
27
SOLID_NOT = 0,
28
SOLID_TRIGGER,
29
SOLID_BBOX,
30
SOLID_SLIDEBOX,
31
SOLID_BSP
32
};
Здесь, как видим - изменений нет. Пользовательская клиентская библиотека переписана на С++, но на самом низком уровне изменений нет. Вместо того чтобы написать собственный класс векторов, наблюдаем вот такую порнографию
ALD_LUMP_EXTERNAL_NOBUMP, // external data with no bump info(not used, legacy support)
7
ALD_LUMP_NIGHTDATA_NOBUMP, // nighttime data with no bump
8
ALD_LUMP_EDD_NIGHTDATA_BUMP, // edd data with no bump info(not used in Pathos, only kept for legacy support)
9
ALD_LUMP_DAYLIGHT_RETURN_DATA_NOBUMP,
10
ALD_LUMP_DAYLIGHT_RETURN_DATA_BUMP
11
};
Лайтмапа на день и ночь по раздельности. Оригинально. Помоему до такого ещё никто не додумался. Собственно hlrad сохраняет лайтмапу именно туда, вместе с бамп-маппингом.
Есть собственные строки, тоже называются CString
C++ Source Code:
1
CString::CString():
2
m_pString(nullptr),
3
m_stringLength(0)
4
{
5
m_pString = new Char[1];
6
*m_pString = '\0';
7
}
А потом мы удивляемся, почему вся память засрана и фрагментирована и не рекомендуем использовать 32-х битные библиотеки, ну конечно!
Ну и в динамических массивах аналогично, нет даже ещё лучше!
C++ Source Code:
1
template <typename T> inlinevoid CArray<T>::push_back( const T& element )
2
{
3
Uint32 addIndex = m_arraySize;
4
if(m_reservedSize <= m_arraySize)
5
resize(m_arraySize+1);
Прямо наглядное пособие по анти-паттернам.
Добавлено 07-03-2024 в 13:47:
Теперь посмотрим игровую библиотеку. В основе - всё та же связка edict_t+CBaseEntity, но хотя бы entvars_t выбросили. Это большая и нудная работа на самом деле. Структура организации игровой библиотеки полностью повторяет халфовскую, но код конечно весь переписан, чтобы избежать претензий. Там нет ничего особо интересного - весь основной код вынесен в движок. Давайте же посмотрим и его наконец.
Обратите внимание - аллокация объекта провоцирует добавление в список полей для сохранения, которые не являются общей статической таблицей, а выделяются отдельно для каждой энтити через CLinkedList, который делает копию каждого элемента при добавлении. В данном случае это делается для entity_data_desc_t, который - тадам! содержит CString
C++ Source Code:
1
struct entity_data_desc_t
2
{
3
// Datatype
4
entfieldtype_t type;
5
// Name of the variable
6
CString fieldname;
7
// Offset into data
8
Uint64 offset;
9
// Size of data
10
Uint16 size;
11
// flags
12
Int16 flags;
13
};
Т.е. каждое поле выделяет минимум один байт, но маллок не может выделить менее 64 байт, а у нас здесь - на каждую энтить, на каждое поле и каждый раз при создании. Это я его ещё не запускал, но мне уже интересно, сколько же эта штука жрёт памяти.
А вот интересная реализация AllocString
C++ Source Code:
1
Uint32 SV_AllocString( const Char* pString )
2
{
3
if(!pString || qstrlen(pString) == 0)
4
return NO_STRING_VALUE;
5
6
// See if it's already present
7
for(Uint32 i = 0; i < svs.strbuffer.numstrings; i++)
8
{
9
if(!qstrcmp(pString, svs.strbuffer.buffer[i]))
10
return i + 1;
11
}
Хэш, бинарный поиск? Действительно, что за глупости.
Смотрим сеть. Тут охотно верю, что код взят из Quake
Ну и соответсвенно там ещё много такого. В клиентском приёмном коде, к слову заметил потенциальную ошибку
C++ Source Code:
if(entindex >= cls.numentities)
cls.numentities = entindex+1;
Тут по смыслу нужен while, а не if. Перехожу к рендереру.
Ну навскидку - тут действительно солянка из Paranoia и Trinity, но например интерполяция лайтстилей - всё же взята из Ксаша. Рендеринг кубемап (основная идея) аналогично. Т.е. он знал, что я буду изучать его сорцы, поэтому постарался всё очень сильно переписать. А в кредитсы меня естественно включать не хочется, поскольку я его тогда тыкал носом в ошибки и он от этого сильно бугуртил. Да я собственно и сейчас тыкаю, только новые ошибки куда фундаментальнее старых. И это только из того что явно в глаза бросилось за полчаса скроллинга.
Ну и подводя итоги, что хочется сказать. Действительно проделана очень большая работа - в основном по переписыванию чужого кода, но конечно там есть и собственные оригинальные находки - например чёрная дыра и vapor-trail. Но к сожалению всё это особого смысла не имеет. Вы наверное помните, я и сам хотел сделать нечто подобное, еще в 2013-м году. Тогда появился ксаш-мод. Второй раз я хотел сделать это в 2016-м - и продолжил работу над рендером паранои, написал компиляторы, расширил форматы.
И всё равно в конечном итоге отдал народу. Причина проста - и HLDML и HLBSP это древние форматы которые давно утратили актуальность.
Строить движок вокруг них - напрасная трата времени. Ладно, когда этот движок ещё совместим с халфой - какой-то смысл в этом есть. А делать по принципу "пусть похожее, но зато своё" - ну такое.
Но в любом случае, повторюсь, объем проделанной работы впечатляет.
Тоесть что в итоге имеем? Опять легаси форматы и легаси код, за который этот же автор критиковал Джек и Ксаш. Тогда ради чего это всё?
Цитата:
Дядя Миша писал: Из папки docs можно узнать всякое. Например, что движок поддерживает лицевую анимацию (скорее всего взята из Source).
Уж лучше нормальные шейпкеи чем городить для этого отдельный опять ни с чем не совместимый формат и редактор
Цитата:
Дядя Миша писал: среди которых замечена текстура от нашего FiEctro, а именно {cj_fence.pmf - да-да, тот самый заборчик, который он когда-то делал лично для меня.
Забавно что я вообще уже не помню что это за текстура.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Почему я так в этом уверен? Этот код он не мог взять ниоткуда, это мое личное изобретение, без которого развесовка попросту не будет работать, если хранить веса в байтах. Их собственно никто в байтах и не хранит по этой причине. А я вот догадался как это разрулить.
Ну и вот так оно переписано, чтобы никто не догдался. Если вдумчиво посидеть можно ещё много таких мелочей найти, но мне лень и всё равно.
Добавлено 07-03-2024 в 13:58:
Цитата:
FiEctro писал: Опять легаси форматы и легаси код, за который этот же автор критиковал Джек и Ксаш. Тогда ради чего это всё?
Ну своё же, своё родное теперь. Ты недооцениваешь силу человеческого фактора.
ЗЫ. Это я просто ресурсы изучал. Потом попозже запущу и проверю в деле.
Ксаш под GPL же? Как можно перелицензировать под MIT? Или он там весь движок переписал? Или только свой код под MIT? Не понятно.
Цитата:
Andras Istvan "Overfloater" Lukacs/Andrew Stephen Lucas
Это четверное имя или сколько там человек указано?
Добавлено 07-03-2024 в 14:22:
Цитата:
The Pathos Engine is a Quake-like engine developed as the basis for my own video game, which began life as a GoldSrc mod back in 2009.
Ну если человек пилит ради своего мода игры выкладывая параллельно исходники это ладно, но не указать оригинального автора это не круто.
Да и что страшного вылодить исходник редактора карт и компилятора моделей. Что ему Вальва сделает? Потребует удалить с Гитхаба?
Дядя Миша писал: Строить движок вокруг них - напрасная трата времени. Ладно, когда этот движок ещё совместим с халфой - какой-то смысл в этом есть. А делать по принципу "пусть похожее, но зато своё" - ну такое.
Но в любом случае, повторюсь, объем проделанной работы впечатляет.
Ну очевидно что у человека синдром утенка, он хочет использовать привычные механизмы как ему кажется дополняя новыми возможностями.
Добавлено 07-03-2024 в 14:25:
Цитата:
Дядя Миша писал: Ну своё же, своё родное теперь. Ты недооцениваешь силу человеческого фактора.
В комплекте с синдромом неприятия чужой разработки.
Добавлено 07-03-2024 в 14:27:
Цитата:
nemyax писал: Просто англофонизация венгерского имени. Андрей-Степан Лукин.
Записывать восточно/центрально славянские имена латиницей это да.
Добавлено 07-03-2024 в 14:29:
Я вот сколько не смотрел видое из плейлиста, атк и не понял чем сабж лучше того же Прайма.