HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Флуд > Pathos Engine
Анонс и релиз в одном флаконе
Страницы (7): « 1 [2] 3 4 5 6 » ... Последняя »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4137

Рейтинг



Цитата:
XaeroX писал:
Но они-то об этом не знают!

Мало того, им вообще до одного места твоя этническая принадлежность.

Сообщить модератору | | IP: Записан
Сообщение: 219935

Старое сообщение 06-03-2024 16:17
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
nemyax писал:
им вообще до одного места твоя этническая принадлежность.

Русский это не просто этническая принадлежность. Русский - это мир!

Добавлено 06-03-2024 в 12:28:

Но вообще это очень наивно считать, что на западе людям до одного места этническая принадлежность... Хотя да, вслух об этом рассуждать не любят. Для русских в последние пару лет сделали исключение, да и то не все.

__________________

Сообщить модератору | | IP: Записан
Сообщение: 219937

Старое сообщение 06-03-2024 17:28
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



XaeroX
Тебя канадцы обижают?

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Сообщить модератору | | IP: Записан
Сообщение: 219939

Старое сообщение 06-03-2024 18:33
- За что?
Crystallize
Житель форума

Дата регистрации: Jul 2007
Проживает: Новосибирск
Сообщений: 4423
Возраст: 34

Рейтинг



Цитата:
Дядя Миша писал:
Наезд был на тех чувачков, которые хотели сделать на нём игру.

Это о том что игру на Ксаше нельзя релизить в Стиме? Half-Life Enhanced?

Сообщить модератору | | IP: Записан
Сообщение: 219940

Старое сообщение 07-03-2024 01:28
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


FiEctro
Нет вроде, но я их почти не вижу - я ж в Торонто живу.
Искать в Торонто коренных канадцев - это всё равно что в Москве искать коренных москвичей. И я не скажу, что это плохо!

__________________

Сообщить модератору | | IP: Записан
Сообщение: 219941

Старое сообщение 07-03-2024 01:40
-
a1batross
Житель форума

Дата регистрации: May 2016
Проживает: Москва
Сообщений: 516
Возраст: 26

Рейтинг



Цитата:
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

Какой же нехороший человек, пишет такое.


Цитата:

-- А почему апдейте халфы для новых карт юзали бесплатную версию джека?
-- А зачем им платить за свой редактор?


Автор если что не я %)

__________________
Xash3D FWGS форк

Сообщить модератору | | IP: Записан
Сообщение: 219942

Старое сообщение 07-03-2024 05:35
- За что?
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



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

XaeroX
Ну ты так говоришь будто там ходят за тобой толпой и тычат пальцем словно прокаженный. Хотя как я понял весь хейт идёт разве что от выходцев из СНГ которые живут теперь на западе.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Отредактировано FiEctro 07-03-2024 в 05:59

Сообщить модератору | | IP: Записан
Сообщение: 219943

Старое сообщение 07-03-2024 05:55
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
Crystallize писал:
Это о том что игру на Ксаше нельзя релизить в Стиме?

Я не знаю, можно или нельзя. Считается что нельзя. Но те, кто пытаются сделать игру на Ксаше, первым делом уведомляют об этом Вальву и она им конечно же говорит - нет. А вот так, чтобы уже сделали и выложили - типа всё норм, об этом мне ничего не известно. Может быть уже и есть прецеденты.

Ну там временем автор апубликовал исходники Pathos, вот ссылка:
https://github.com/TheOverfloater/p...ublic/tree/main

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 219944

Старое сообщение 07-03-2024 06:41
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



Цитата:
Crystallize писал:

Это о том что игру на Ксаше нельзя релизить в Стиме?


Если избавишься от халфовских зависимостей то никто ничего предъявить не сможет.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Сообщить модератору | | IP: Записан
Сообщение: 219945

Старое сообщение 07-03-2024 07:09
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Ну чтож, давайте поизучаем структуру. Для начала - ресурсы. Я буду дополнять пост по мере изучения.
Спрайты - халфовские, 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
Так же в комплекте идёт какая-то мощная система партиклей, но это как раз неудивительно. Программисты, научившиеся писать код боле-мене нормально первым делом почему-то пишут именно партикл-систему.
Даётся описание системы материалов, оно довольно простое:
C++ Source Code:
1
$texture
2
{
3
  $alphatest
4
  $texture diffuse models/shellcasings/pistolcasing_silver.tga
5
  $texture luminance models/bullets/pistolcasing_silver_glow.tga
6
}

Ну и так же есть параметры для кубемап, копии экрана, бампа, глосса и детальной текстуры. И стандартный набор параметров, типа $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
C++ Source Code:
1
"default"
2
{
3
  "impact_decal"	"shot"
4
  "impact_parts"	"test_impact" "test_smoke"
5
  "impact_sound"	"debris/concrete1.wav" "debris/concrete2.wav" "debris/concrete3.wav" "debris/concrete4.wav"
6
  "step_sound"	"player/pl_beton1.wav" "player/pl_beton2.wav" "player/pl_beton3.wav" "player/pl_beton4.wav"
7
}

Pathos
C++ Source Code:
1
"default"
2
{
3
  sounds {
4
    "impact/concrete_impact_bullet1.wav"
5
    "impact/concrete_impact_bullet2.wav"
6
    "impact/concrete_impact_bullet3.wav"
7
    "impact/concrete_impact_bullet4.wav"
8
  }
9
  decalgroup "shot"
10
  particlescript "concrete_impact_cluster.txt"
11
  scripttype cluster
12
  penetration {
13
    BULLET_PLAYER_GLOCK 0 0 0 0 0
14
    BULLET_PLAYER_KNIFE 0 0 0 0 0
15
    BULLET_NPC_9MM 0 0 0 0 0
16
    BULLET_NPC_BUCKSHOT 0 0 0 0 0
17
    BULLET_NPC_SIG552 24 1 2 0.5 1
18
    BULLET_NPC_M249 24 1 2 0.5 1
19
    BULLET_NPC_TRG42 32 3 1 0.7 1
20
  }
21
  ricochet {
22
    BULLET_PLAYER_GLOCK 15 4 3 1 0.5
23
    BULLET_PLAYER_KNIFE 0 0 0 0 0
24
    BULLET_NPC_9MM 15 4 3 1 0.5
25
    BULLET_NPC_BUCKSHOT 5 4 4 1 0.7
26
    BULLET_NPC_SIG552 10 3 2 2 0.2
27
    BULLET_NPC_M249 10 3 2 2 0.2
28
    BULLET_NPC_TRG42 15 2 2 2 0.3
29
  }
30
}

Ну да, чуть-чуть добавили параметров, но внутренняя логика нарушена. Пенетрация и рикошет должны быть в настройках оружия, а не материалов. В настройках материалов тогда уж должна быть плотность.
Папка 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
$branch shadertype == 0 || shadertype == 1 || shadertype == 2 || shadertype == 3 || shadertype == 5 || shadertype == 6 || shadertype == 4 || shadertype == 10 || shadertype == 12 || shadertype == 13 || shadertype == 14 || shadertype == 15 || shadertype == 16 || shadertype == 17
2
$begin
3
ps_texcoord1 = in_texcoord1 + scroll;
4
$end

То есть тут очевидно какой-то злокачественный комбинаторный взрыв.
Вот ещё любопытное
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
typedef struct
2
{
3
  int				id;
4
  int             version;
5
  lump_t          lumps[HEADER_LUMPS];
6
}
7
dheader_t;

Здесь добавлен идентификатор.
C++ Source Code:
1
typedef struct
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
  unsigned int	firstface;
8
  unsigned int	numfaces;                              // counting both sides
9
}
10
dnode_t;
11
typedef struct
12
{
13
  int             planenum;
14
  int				children[2];                           // negative numbers are contents
15
}
16
dclipnode_t;
17
typedef struct
18
{
19
  unsigned int  v[2];                                  // vertex numbers
20
}
21
dedge_t;
22
typedef struct
23
{
24
  unsigned int	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
};

Здесь, как видим - изменений нет. Пользовательская клиентская библиотека переписана на С++, но на самом низком уровне изменений нет. Вместо того чтобы написать собственный класс векторов, наблюдаем вот такую порнографию
C++ Source Code:
1
Math::VectorScale(m_idealLeanAngles, leanFraction, m_curLeanAngles);
2
Math::VectorMA(m_curLeanAngles, (1.0-leanFraction), m_prevLeanAngles, m_curLeanAngles);
3
Math::VectorMA(pviewmodel->curstate.angles, 0.4, m_curLeanAngles, pviewmodel->curstate.angles);
4
Math::VectorCopy(pviewmodel->curstate.angles, pviewmodel->curstate.angles);

Время на причёсывание кода потрачено как-то очень избирательно, да.
Так же найден новый формат ald
C++ Source Code:
1
enum aldlumptype_t
2
{
3
  ALD_LUMP_NIGHTDATA_BUMP = 1, // nighttime light data for bsp
4
  ALD_LUMP_EDD_NIGHTDATA_NOBUMP, // nighttime light data for edd(not used in Pathos, only kept for legacy support)
5
  ALD_LUMP_EXTERNAL_BUMP, // externally stored regular BSP lightdata(not used, legacy support)
6
  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> inline void 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 выбросили. Это большая и нудная работа на самом деле. Структура организации игровой библиотеки полностью повторяет халфовскую, но код конечно весь переписан, чтобы избежать претензий. Там нет ничего особо интересного - весь основной код вынесен в движок. Давайте же посмотрим и его наконец.
C++ Source Code:
1
bool SV_InitPrivateData( edict_t* pedict, const Char* pstrClassname )
2
{
3
  // Init the gamedll interface
4
  pfnPrivateData_t pfn = reinterpret_cast<pfnPrivateData_t>(SDL_LoadFunction(svs.pdllhandle, pstrClassname));
5
  if(!pfn)
6
    return false;
7
 
8
  // Call the function
9
  pfn(pedict);
10
 
11
  // Call to declare save fields
12
  svs.dllfuncs.pfnDispatchDeclareSaveFields(pedict);
13
 
14
  return true;
15
}

Обратите внимание - аллокация объекта провоцирует добавление в список полей для сохранения, которые не являются общей статической таблицей, а выделяются отдельно для каждой энтити через 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:
1
if(updateMask & U_BASICS4)
2
{
3
  svs.netinfo.pnet->WriteFloat(curstate.health);
4
  svs.netinfo.pnet->WriteFloat(curstate.armorvalue);
5
  svs.netinfo.pnet->WriteInt32(curstate.frags);
6
  svs.netinfo.pnet->WriteInt64(curstate.weapons);
7
  svs.netinfo.pnet->WriteInt32(curstate.buttons);
8
  svs.netinfo.pnet->WriteInt32(curstate.oldbuttons);
9
  svs.netinfo.pnet->WriteUint64(curstate.flags);
10
  svs.netinfo.pnet->WriteInt32(curstate.waterlevel);
11
  svs.netinfo.pnet->WriteFloat(curstate.fov);
12
}

Ну и соответсвенно там ещё много такого. В клиентском приёмном коде, к слову заметил потенциальную ошибку
C++ Source Code:
if(entindex >= cls.numentities)
  cls.numentities = entindex+1;

Тут по смыслу нужен while, а не if. Перехожу к рендереру.
Ну навскидку - тут действительно солянка из Paranoia и Trinity, но например интерполяция лайтстилей - всё же взята из Ксаша. Рендеринг кубемап (основная идея) аналогично. Т.е. он знал, что я буду изучать его сорцы, поэтому постарался всё очень сильно переписать. А в кредитсы меня естественно включать не хочется, поскольку я его тогда тыкал носом в ошибки и он от этого сильно бугуртил. Да я собственно и сейчас тыкаю, только новые ошибки куда фундаментальнее старых. И это только из того что явно в глаза бросилось за полчаса скроллинга.

Ну и подводя итоги, что хочется сказать. Действительно проделана очень большая работа - в основном по переписыванию чужого кода, но конечно там есть и собственные оригинальные находки - например чёрная дыра и vapor-trail. Но к сожалению всё это особого смысла не имеет. Вы наверное помните, я и сам хотел сделать нечто подобное, еще в 2013-м году. Тогда появился ксаш-мод. Второй раз я хотел сделать это в 2016-м - и продолжил работу над рендером паранои, написал компиляторы, расширил форматы.
И всё равно в конечном итоге отдал народу. Причина проста - и HLDML и HLBSP это древние форматы которые давно утратили актуальность.
Строить движок вокруг них - напрасная трата времени. Ладно, когда этот движок ещё совместим с халфой - какой-то смысл в этом есть. А делать по принципу "пусть похожее, но зато своё" - ну такое.
Но в любом случае, повторюсь, объем проделанной работы впечатляет.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 219946

Старое сообщение 07-03-2024 10:47
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



Тоесть что в итоге имеем? Опять легаси форматы и легаси код, за который этот же автор критиковал Джек и Ксаш. Тогда ради чего это всё?

Цитата:
Дядя Миша писал:
Из папки docs можно узнать всякое. Например, что движок поддерживает лицевую анимацию (скорее всего взята из Source).


Уж лучше нормальные шейпкеи чем городить для этого отдельный опять ни с чем не совместимый формат и редактор

Цитата:
Дядя Миша писал:
среди которых замечена текстура от нашего FiEctro, а именно {cj_fence.pmf - да-да, тот самый заборчик, который он когда-то делал лично для меня.


Забавно что я вообще уже не помню что это за текстура.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Отредактировано FiEctro 07-03-2024 в 10:54

Сообщить модератору | | IP: Записан
Сообщение: 219947

Старое сообщение 07-03-2024 10:53
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Ну кстати к вопросу, как он всё переписывает.
Вот пример из паранои:

C++ Source Code:
flTotal = flWeight0 + flWeight1 + flWeight2 + flWeight3;
 
if( flTotal < 1.0f ) flWeight0 += 1.0f - flTotal;	// compensate rounding error

Переделано вот в это
C++ Source Code:
1
void VBM_NormalizeWeights( Float* pflweights, Uint32 maxweights )
2
{
3
  Float totalweight = 0;
4
  for(Uint32 i = 0; i < maxweights; i++)
5
    totalweight += pflweights[i];
6
 
7
  Float scale = 1.0f/totalweight;
8
  for(Uint32 i = 0; i < maxweights; i++)
9
  {
10
    if(pflweights[i] > 0)
11
      pflweights[i] *= scale;
12
  }
13
}

Почему я так в этом уверен? Этот код он не мог взять ниоткуда, это мое личное изобретение, без которого развесовка попросту не будет работать, если хранить веса в байтах. Их собственно никто в байтах и не хранит по этой причине. А я вот догадался как это разрулить.
Ну и вот так оно переписано, чтобы никто не догдался. Если вдумчиво посидеть можно ещё много таких мелочей найти, но мне лень и всё равно.

Добавлено 07-03-2024 в 13:58:

Цитата:
FiEctro писал:
Опять легаси форматы и легаси код, за который этот же автор критиковал Джек и Ксаш. Тогда ради чего это всё?

Ну своё же, своё родное теперь. Ты недооцениваешь силу человеческого фактора.

ЗЫ. Это я просто ресурсы изучал. Потом попозже запущу и проверю в деле.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 219948

Старое сообщение 07-03-2024 10:58
-
Cybermax
Житель форума

Дата регистрации: May 2006
Проживает: &#12644;
Сообщений: 5126

Рейтинг



Цитата:

Pathos Engine - Public Release Copyright © 2021 Andras Istvan "Overfloater" Lukacs/Andrew Stephen Lucas Released under the MIT license

Ксаш под 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.

Ну если человек пилит ради своего мода игры выкладывая параллельно исходники это ладно, но не указать оригинального автора это не круто.
Да и что страшного вылодить исходник редактора карт и компилятора моделей. Что ему Вальва сделает? Потребует удалить с Гитхаба?

__________________

Сообщить модератору | | IP: Записан
Сообщение: 219949

Старое сообщение 07-03-2024 11:22
- За что?
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4137

Рейтинг



Цитата:
Cybermax писал:
Это четверное имя или сколько там человек указано?

Просто англофонизация венгерского имени. Андрей-Степан Лукин. Хотя у венгров-то может быть Андреев Степан-Лука.

Отредактировано nemyax 07-03-2024 в 11:25

Сообщить модератору | | IP: Записан
Сообщение: 219950

Старое сообщение 07-03-2024 11:22
- За что?
Cybermax
Житель форума

Дата регистрации: May 2006
Проживает: &#12644;
Сообщений: 5126

Рейтинг



Цитата:
Дядя Миша писал:
Строить движок вокруг них - напрасная трата времени. Ладно, когда этот движок ещё совместим с халфой - какой-то смысл в этом есть. А делать по принципу "пусть похожее, но зато своё" - ну такое.
Но в любом случае, повторюсь, объем проделанной работы впечатляет.

Ну очевидно что у человека синдром утенка, он хочет использовать привычные механизмы как ему кажется дополняя новыми возможностями.

Добавлено 07-03-2024 в 14:25:

Цитата:
Дядя Миша писал:
Ну своё же, своё родное теперь. Ты недооцениваешь силу человеческого фактора.

В комплекте с синдромом неприятия чужой разработки.

Добавлено 07-03-2024 в 14:27:

Цитата:
nemyax писал:
Просто англофонизация венгерского имени. Андрей-Степан Лукин.

Записывать восточно/центрально славянские имена латиницей это да.

Добавлено 07-03-2024 в 14:29:

Я вот сколько не смотрел видое из плейлиста, атк и не понял чем сабж лучше того же Прайма.

__________________

Сообщить модератору | | IP: Записан
Сообщение: 219951

Старое сообщение 07-03-2024 11:29
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 23:26. Новая тема    Ответить
Страницы (7): « 1 [2] 3 4 5 6 » ... Последняя »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Флуд > Pathos Engine
Анонс и релиз в одном флаконе
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024