Воистину кому-то было нечем заняться.
И ты готов вот эту кучу кода утянуть в свой проект и регулярно проверять её насчёт обновления? А еще лучше - десять, двадцать, сто библиотек, и специальный планировщик, который всё это автоматически обновляет и билдит и тут же прогоняет юнит-тесты. Правда давно уже никто не понимает как это всё работает и старается не дышать рядом.
Дядя Миша писал: И ты готов вот эту кучу кода утянуть в свой проект и регулярно проверять её насчёт обновления? А еще лучше - десять, двадцать, сто библиотек, и специальный планировщик, который всё это автоматически обновляет и билдит и тут же прогоняет юнит-тесты. Правда давно уже никто не понимает как это всё работает и старается не дышать рядом.
А какой смысл её обновлять если оно и так работает нормально? Не, ну если зачем-то вдруг понадобится обновиться, то это все делается буквально заменой одной строчки в vcpkg-манифесте. А так я без понятия, зачем подобные вещи обновлять, ибо там уже и так есть всё что нужно.
Дядя Миша писал: И ты готов вот эту кучу кода утянуть в свой проект и регулярно проверять её насчёт обновления? А еще лучше - десять, двадцать, сто библиотек, и специальный планировщик, который всё это автоматически обновляет и билдит и тут же прогоняет юнит-тесты. Правда давно уже никто не понимает как это всё работает и старается не дышать рядом.
Так в чём проблема? Напиши свой парсер, причём тут формат? Ну могу скинуть тот что я юзаю, там всего 1 .h файлик, и никаких дополнительных библиотек Правда он для работы только с текстовым Жсоном, но доработать под бинарный возможно.
Цитата:
Дядя Миша писал: А еще лучше - десять, двадцать, сто библиотек,
По моему опыту это скорее плюс чем минус, главное конечно не перегибать с этим. Есть много библиотек которые ну очень мало весят.
Цитата:
Дядя Миша писал: И ты готов вот эту кучу кода утянуть в свой проект и регулярно проверять её насчёт обновления?
Вместо этого конечно наплодить зоопарк форматов, и заставлять пользователей твоего движка регулярно проверять насчёт обновления, а ещё писать утилиты миграции Историю сорсовских hlbsp v.... и hlmdl v.... я ещё помню
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
А так я без понятия, зачем подобные вещи обновлять, ибо там уже и так есть всё что нужно
Всё что нужно, в том числе уязвимости, по классике Си и С++. Ничего не утверждаю, но мало ли.
Добавлено 15-04-2023 в 01:21:
Я уже не говорю о том, что для валидации JSON документа придётся явно выдумывать что-то своё, так как стандарт не учитывает существование схем, в конце концов это просто способ представления JavaScript объектов. А JSON такой -- запросто можно пропустить ключ или не тот тип ему выставить, неймспейсов у него кстати тоже нет.
1. Формат описания исходников карт всё же будет текстовый.
2. Формат будет универсальный, абстрактный, позволяющий его легко расширять до бесконечности.
3. Формат с прямой и обратной совместимостью, т.е. если встретятся незнакомые описания, парсер их просто пропустит.
4. Формат иерархический вложенный, базируется на двух ключевых конструкциях:
- токенах, начинающися с решётки #, как директива препроцессору
- ключевых словах без решётки, обозначающих именованную секцию фигурных скобок. Имя каждой такой секции оканчивается на "Def", хотя будущим стандартом это и не регламентируется.
Подобная схема уже отлично себя зарекомендовала в файле настройек для компилятора уровней и в описании материалов (тоже абстрактная универсальная система). Пример простейшего map-файла:
C++ Source Code:
1
#version 1.0
2
3
EntityDef
4
{
5
"classname""worldspawn"
6
"message""Test Level"
7
8
ConvexDef
9
{
10
"flags""C_SOLID"
11
"id""0"
12
"group""0"
13
14
SideDef
15
{
16
"material""AAATRIGGER"
17
"plane""0 0 1 1000"
18
"uaxis""1 0 0"
19
"vaxis""0 1 0"
20
"id""0"
21
"group""0"
22
}
23
SideDef
24
{
25
"material""AAATRIGGER"
26
"plane""0 0 -1 1010"
27
"uaxis""1 0 0"
28
"vaxis""0 1 0"
29
"id""0"
30
"group""0"
31
}
32
SideDef
33
{
34
"material""AAATRIGGER"
35
"plane""0 1 0 1000"
36
"uaxis""1 0 0"
37
"vaxis""0 1 0"
38
"id""0"
39
"group""0"
40
}
41
SideDef
42
{
43
"material""AAATRIGGER"
44
"plane""0 -1 0 1010"
45
"uaxis""1 0 0"
46
"vaxis""0 1 0"
47
"id""0"
48
"group""0"
49
}
50
SideDef
51
{
52
"material""AAATRIGGER"
53
"plane""1 0 0 1000"
54
"uaxis""1 0 0"
55
"vaxis""0 1 0"
56
"id""0"
57
"group""0"
58
}
59
SideDef
60
{
61
"material""AAATRIGGER"
62
"plane""-1 0 0 1010"
63
"uaxis""1 0 0"
64
"vaxis""0 1 0"
65
"id""0"
66
"group""0"
67
}
68
}
69
}
70
71
EntityDef
72
{
73
"classname""info_player_start"
74
"origin""0 0 64"
75
}
Оно чем-то напоминает Valve Map Format, но там идёт жесткая привязка к версиям редатора и другие ограничения. К тому же подобный формат может без проблем хранить не только уровни, но и модели, ландшафты и любые другие данные, главное ввести соответствующую именованную секцию. Причём парсер по глубине вложений понимает что перед ним - уровень или модель. Если на верхнем уровне секция MeshDef, значит это просто модель. Если же на верхнем уровне секция EntityDef, значит это уровень. Так же, напоминаю, будет доступна старая фишка когда уровни могут вкладываться друг в друга.
Модели вы сможете хранить в следующих форматах:
1. CSM - бинарный файл для хранения моделей. Содержит вспомогательную информацию для облегчения и ускорения компиляции, в частности - развертку для построения лайтмап, но не только. Редактировать можно Блендером. Компиляции не требует. Поддерживаются только статичные модели без костей.
2. MDL - нативный формат самого XashNT (возможно в будущем привычные расширения bsp, mdl, spr я заменю на какие-то иные, но тут зависит от мнения пользователей). Может содержать анимации, однако при вкомпиливании в карту остаётся только один статичный кадр. Но зато его можно выбрать в настройках энтити.
3. Старые форматы md3, ase, obj, smd. Компилятор автоматически превратит их в CSM. Но возможно будет лучше это сделать в процессе миграции с других игр. Пока ещё не знаю точно.
4. Собственно новый абстрактный формат описания уровней (расширение пока что не придумано).
интересно, а как отличить "material" и "AAATRIGGER" где параметр, а где его значение? только по очереди?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Дядя Миша писал: ключ-значение ВСЕГДА идут парами.
Ну и удалили мы "material" в начале, и всё местами поменялось
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
так можно просто запятую поставить:
"material" "AAATRIGGER",
"plane" "0 0 1 1000",
"uaxis" "1 0 0",
"vaxis" "0 1 0",
"id" "0",
"group" "0"
Тогда сразу будет понятно какое поле битое. Можно будет вывести в консоль сразу номер строки. Зачем усложнять отладку?
Цитата:
Дядя Миша писал: Удали один байт и тоже всё перепутается.
Дык то байты, а то текст
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Никакие запятые там нахрен не нужны.
Если соответствующий ключ не будет найден, он просто скипнется и работоспособность будет восстановлена, начиная со следующего ключа.
Это само-восстанавливающийся формат данных, если ты не знал.
Добавлено 17-04-2023 в 15:12:
Вот как раз наличие запятых и усложнит отладку и замедлит парсинг.
В телеграме выложил серию постов, отчёты о проделанной работе и о том, что предстоит сделать в ближайшее время. Ну а здесь хочу просто немного порассуждать на тему того, что является самым сложным в разработке, даже не софта, а как в моём случае - полноценной экосистемы.
Так уж получилось, что сейчас все увлекаются эко-системами. Какой-то изолированный программный продукт никого не удивляет и мало кому нужен.
Вот и XashNT разрабатывается как эко-система для разработки игр.
Изначально в 2019-м году я такой задачи перед собой не ставил, но в процессе дело приобрело невиданный размах и общественную значимость.
Так вот самое сложное, на мой взгляд - это определить границы экосистемы, а значит и ответственности. С одной стороны, заложенный потенциал, позволит всему этому разрастаться ещё достаточно долго если(тут следует перечисление всех возможных сценариев развития событий). Но исходя из пессимистичного варианта (я по прежнему продолжаю работу над движком в гордом одиночестве), границы моей ответственности будут ограничены редактором и созданием полноценного work-flow в будущем.
Это означает, что в идеале для разработки на XashNT не понадобятся никакие сторонние редакторы. Но конечно такое состояние будет достигнуто далеко не сразу.