Концепция открытого мира в CS 1.6

Сообщения
273
Реакции
424
Помог
5 раз(а)
Я давно работаю над темой открытого мира в CS. На данный момент я пришёл к следующим пунктам:
1. Для начала нужно расширить границы мира на стороне игровой DLL, в частности изменить ограничения в CBaseEntity::IsInWorld() с +/-4096 юнита на максимально доступные для движка +/-32768. Так же необходимо подкорректировать файл delta.lst, что незначительно скажется на точности передачи координат игроков и объектов.​
2. Повысить диапазон передачи координат для таких сообщений как svc_particle, svc_spawnstatic, svc_spawnstaticsound и svc_tempentity. На данный момент они передаются через MSG_WriteCoord() MSG_ReadCoord() (float / 8 => int16 => float * 8 ) и ограничены теми же +/-4096 юнитами.​
3. Наверное самое главное, это оптимизация мира, так как при таких размерах wpoly и epoly будут очень высокими в связи с чем из-за устаревшего метода отрисовки в движке, точнее отправки данных в видеокарту, будет сильно просидать FPS.​
4. С этим пунктом сложнее, так как для его реализации необходимо вмешиваться в движок на клиенте. Речь идёт о повышении максимального количества видимых entity, стандартное ограничение 256. В принципе этот пункт можно исключить, и при правильной оптимизации мира получить неплохие результаты и без него.​
По перечисленным выше пунктам:
1. Реализовать проще всего изменив исходники и пересобрав игровую DLL. Ну или эмулировать плагинами объекты класса CGrenade, CGib и т.д.​
2. Я написал asi модуль для клиента который регистрирует в движке и обрабатывает так сказать расширенные сообщения являющиеся аналогами выше перечисленных в которых coord координаты заменены на float. В данный момент разрабатываю metamod модуль, который определяет по квару на клиенте установлена ли asi и в случае если да, то подменяет сообщения отправляемые игровой dll на расширенные. В скором будущем выложу сборку, если найдутся желающие потестить. Так же был бы рад если кто напишет плагин на amxx для теста вышеперечисленных сообщений, могу и сам, но времени не хватает, да и в очередной раз вникать в тонкости pawn нет желания.​
3. В разработке система устройства мира по принципу деления игрового мира на сектора способные менять свой уровень детализации в зависимости от удаления от объекта. По этому пункту скажу сразу, что необходима своя игровая DLL, с новыми принципами построения списка видимых объектов, в частности по таким критериям как viewangle, fov, distance и некоторым другим. Последовательность построения карты будет следующая:​
1) Создание ландшафта, например в TerrainGenerator из карты высот.​
2) Прогонка получившегося MAP файла через специально написанную мной утилиту, которая группирует все браши ландшафта в сектора и задаёт им свойства, такие как порядковый номер (необходим для ассоциации с ними других объектов мира), двумерные координаты на плоскости мира для определения видимости ну и некоторые другие.​
3) Автоматическое расставление объектов растительности. Думаю реализовать это в вышеупомянутой утилите.​
4) Размещение объектов инфраструктуры в каком-нибудь редакторе карт, таких как здания, дороги, заборы, мосты и т.д. и корректировка растительности.​
5) Прогонка получившегося MAP файла через очередную утилиту, которая будет преобразовывать brush модели в studio и объединять их в одну на сектор и создавать сабмодели с разной детализацией. Так же в brush модели будут добавляться браши, являющиеся хитбоксами studio моделей, это необходимо для обработки столкновений. Здесь мы уменьшим количество моделей на карте с может быть нескольких сотен, до нескольких десятков штук, упаковав в studio модели.​
6) Далее получившийся набор из нескольких десятков секторов компилируем в BSP.​
4. По этому пункту могу сказать только-то, что требуется свой клиент.​
Здесь я, коротко не вдаваясь в подробности, изложил свои идеи, так как многое ещё не реализовано. Буду рад вашим предложения и дополнениям.
 
Сообщения
2,288
Реакции
1,739
Помог
31 раз(а)
bionext, лучше в открытый раздел думаю писать, так как там есть заинтересованные люди, но без лычку форума
25 Сен 2021
bionext, и немного не в тему, но спрошу - помнится у тебя был проект по реализации 64 слота, он в итоге был завершен или застрял на какой-то стадии?
 
Сообщения
273
Реакции
424
Помог
5 раз(а)
Не, в открытый ещё рано. Как только дойду до бета версии, так и выложу в открытый. А по поводу 64 и более слотов всё упирается в 4 пункт. Вот представь себе на площадке собрались всё 64 игрока, это получается, что в пакете видимых энтити у нас уже как минимум 128 штук (энтити игрока и энтити оружия), а ещё нужны позиции, чтобы мир отрисовать. Хотя есть варианты решения, но я пока до этого момента не дошёл.
 
Последнее редактирование:
Сообщения
273
Реакции
424
Помог
5 раз(а)
Сегодня протестировал альфа версию системы названной мною "Extended System", служащей для расширения границ доступного мира в кс. Теперь с этой системой границы находятся в пределах +/-32768 юнитов, что при стандартных хуллбоксах равно около +/- 830 метров реального мира. В систему входит доработанная игровая dll с отредактированным delta.lst, metamod плагин и клиентская asi библиотека. Причём asi не вносит изменения в клиент игры, а использует стандартные вызовы движка, так что скорее всего VAC на нё риагировать не будет. Покрайней мере я на это надеюсь, но пока не проверял. Если есть желающие протестировать могу выложить сборку, правдо пока только под widows.
 
Сообщения
2,288
Реакции
1,739
Помог
31 раз(а)
bionext, Это очень здорово, но к сожалению я не думаю, что кто-то адекватно сможет протестировать такой проект. Даже если установят, то что они с ним будут делать? Просто закидают вопросами ни о чем. Лично моё мнение я бы посоветовал тебе проработать это с командой next21. Но за них говорить не буду, пусть сами ответят. 8dp, Xelson, Faktor , Polarhigh . Так же возможно заинтересуется Hedgehog Fog . Так же Garey любитель ковырнуть поглубже ))
 
Последнее редактирование:
Сообщения
105
Реакции
194
3. Наверное самое главное, это оптимизация мира, так как при таких размерах wpoly и epoly будут очень высокими в связи с чем из-за устаревшего метода отрисовки в движке, точнее отправки данных в видеокарту, будет сильно просидать FPS.
Ну рендер я уже начал потихоньку делать. Он скорей всего будет в виде exe-лаунчера + asi-библиотеки.

4. С этим пунктом сложнее, так как для его реализации необходимо вмешиваться в движок на клиенте. Речь идёт о повышении максимального количества видимых entity, стандартное ограничение 256. В принципе этот пункт можно исключить, и при правильной оптимизации мира получить неплохие результаты и без него.
Ну это лимит на уровне сетевого протокола, там в принципе ничего особо с этим не поделаешь. Но 256 это просто катастрофически мало. Мы даже с повышенным ксашевским лимитов на 512 в него довольно быстро уперлись.

на максимально доступные для движка +/-32768.
Это уже принципиальное ограничение самого BSP формата, да. В ксаше есть поддержка BSP2 в котором этот лимит расширен до 2^32 юнитов или что-то такое, точно не помню, но на таких масштабах будет уже другая проблема - нехватка точности флоатов. Всё же опен-ворлд движки изначально по-другому проектируются.
 
Сообщения
273
Реакции
424
Помог
5 раз(а)
SNMetamorph, Да проблема с точностью выливается в проваливание модельки игрока в текстуру на большом расстоянии, но у меня есть идеи как это подкорректировать, но это в будущем. Пока я думаю обрезать дальность прорисовки до наступления этого момента.
 
Сообщения
273
Реакции
424
Помог
5 раз(а)
Для желающих протестировать выкладываю бета сборку. Архив содержит следующие файлы:
ESClient.asi - клиентская часть размещается в папке с hl.exe, пока что работает только с windows клиентом;
ESModule.dll - metamod модуль, проверенно только с metamod-r да и писался под него, модуль работает только с Rehlds. Для адекватного перехвата сообщений от других плагинов модуль должен быть первым в списке модулей metamod.ini;
ESModule_mm_i386.so - тоже самое, что и верхний пункт, только под linux. Работу этого модуля проверить вообще не успел только собрал, так что если кто проверит буду рад узнать результаты;
delta.lst - подкорректированный файл энкодеров, для большой локации, размещается в папке мода сервера( например cstrike);
test.bsp - тестовая карта на +/-32768 юнитов, не представляет из себя чего-то особенного. Советую запускать клиент в видео режиме derectx(D3D), так хоть будет более менее приемлемый фпс.
mp.dll - доработанная игровая dll (крайняя версия ReGameDLL_CS с GitHub), с расширенным диапазоном функции IsInWorld. Размещается на стороне сервера по пути cstrike/dlls
 

Вложения

Последнее редактирование:
Сообщения
273
Реакции
424
Помог
5 раз(а)
Кстати с доработанным delta.lst и стандартные клиенты будут перемещаться по всей локации, только без asi модуля все спецэффекты будут работать в центре карты.
 
Сообщения
3,582
Реакции
1,570
Помог
137 раз(а)
bionext, в общем, потестировал на скорую руку:
  1. FPS на 1920*1080 у меня равнялся в среднем 55-60 к/с. на "земле" и около 30, если подняться и смотреть на всю карту свехру. D3D не ставил.
  2. Почему-то декали от выстрела рисуются не там, куда направлен прицел, а чуть в стороне.
  3. Декали от выстрела рисуются вообще как-то странно. После какого-то момента, начинает рисоваться только от последнего выстрела, при этом старые остаются.
  4. Некоторые TempEntity проваливаются под карту.
  5. Выстрелы не наносят урон на расстоянии свыше 8192 юнитов. Ну тут догадываюсь, почему: потому что трассировка выстрела в движке делается на 8192. Я прав?
  6. Есть какая-то зона в районе спавна, равная 8192 * 8192 * 8192 юнитов. GoldSrc Monitor от SNMetamorph определяет её как энтити. Так вот, за её пределами, гранаты исчезают сразу после броска.
  7. Фонарик не имеет никакого действия. Луча не видно.
  8. После установки модифицированного delta.lst на сервере появились визуальные фризы картинки, на любой карте, не только тестовой.
  9. CS нагрузила мою GTX 1060 6gb на 100% при открытом клиенте. ?
20211006195339_1.jpg

20211006195342_1.jpg

20211006195317_1.jpg

20211006195318_1.jpg

20211006193012_1.jpg

Неправильная регистрация декаля. Стрелял примерно в отмеченное место.

1633540458886.png

1633540574662.png

1633540629545.png

1633540650186.png

1633540411165.png

Впечатления: расстояния действительно поражают воображение! Бежать из одного угла карты в другой - ооочень долго. Видеть модельку игрока издалека размером с пиксель - очень необычно.
От себя желаю не забрасывать данный проект и буду помогать по мере своих возможностей.
 

Download all Attachments

Сообщения
273
Реакции
424
Помог
5 раз(а)
Nordic Warrior, asi модуль на клиенте установил?
Есть какая-то зона в районе спавна, равная 8192 * 8192 * 8192 юнитов. GoldSrc Monitor от @SNMetamorph определяет её как энтити. Так вот, за её пределами, гранаты исчезают сразу после броска.
Эта система и расширяет эту зону, asi модуль на клиент ставил? Если да то какой билд клиента? Проверить запущен ли asi можно в консоли введя ESC_Version, если есть значение равное 1 то модуль запущен, только не меняй значение. На сервере также убедись что работает ESModule через meta list, и в metamod.ini он должен быть в первой строке, так же могут мешать протекторы.
 
Сообщения
105
Реакции
194
Мне кажется, при создании карт под такие масштабы вскроется куча других лимитов.
 
Сообщения
273
Реакции
424
Помог
5 раз(а)
Возможно, о некоторых я догадываюсь, но пути решения уже есть.
6 Окт 2021
Nordic Warrior, Да и ещё, я забыл выложить доработанную game.dll, функция IsInWorld просто не дает спавнится гранатам.
 
Сообщения
3,582
Реакции
1,570
Помог
137 раз(а)
Nordic Warrior, asi модуль на клиенте установил?

Эта система и расширяет эту зону, asi модуль на клиент ставил? Если да то какой билд клиента? Проверить запущен ли asi можно в консоли введя ESC_Version, если есть значение равное 1 то модуль запущен, только не меняй значение. На сервере также убедись что работает ESModule через meta list, и в metamod.ini он должен быть в первой строке, так же могут мешать протекторы.
Да, всё ставил. Протектор есть.
p.s. Сервер на Windows.
Код:
] ESC_Version
"ESC_Version" is "1"

] version
Protocol version 48
Exe version 1.1.2.7/Stdio (cstrike)
Exe build: 19:53:27 Aug  3 2020 (8684)

//server:
Currently loaded plugins:
      description           stat pend  file                  vers             src  load  unload
 [ 1] Extend System Module  RUN   -    esmodule.dll          v0.1             ini  ANY   Never

@Nordic Warrior, Да и ещё, я забыл выложить доработанную game.dll, функция IsInWorld просто не дает спавнится гранатам.
Тогда, думаю, дело в этом.
 
Сообщения
3,582
Реакции
1,570
Помог
137 раз(а)
bionext, да, с ней с гранатами всё в порядке.

Забыл вчера сообщить еще об одной странности:
При включённом модуле Extend System Module и при использовании одного из моих плагинов, перехватывающих и подменяющих параметры сообщения DeathMsg, собственно сами DeathMsg начинают дублироваться. Без модуля такой проблемы нет.
Кусок кода плагина с DeathMsg:
Скрытое содержимое для пользователей: bionext
 
Сообщения
273
Реакции
424
Помог
5 раз(а)
Nordic Warrior, Понятно, суть в том, что его сначала перехватывает Extend System Module и напрямую отправляет в движок, а затем его перехватывает amxx модуль и тоже отправляет в движок. Я с плагинами не тестировал, некогда заниматься amxx вот поэтому и просил проверить. Возьму на заметку этот баг.
 
Сообщения
273
Реакции
424
Помог
5 раз(а)
Немного результатов по пункту 3.2:
Исходные текстуры ландшафта
source.png
совмещённые утилитой текстуры, в центре виден небольшой артефакт в виде диагональной полосы, это недоработка генератора прозрачности, всё в процессе разработки :)
destination.png
 
Сообщения
105
Реакции
194
Ну рендер я уже начал потихоньку делать. Он скорей всего будет в виде exe-лаунчера + asi-библиотеки.
Вскрылась одна деталь: в CS 1.6 в рендере студиомоделей нагородили всякого ещё поверх того, что там было изначально в HLSDK, насколько помню, они там добавили 9-way blending, возможно что-то ещё. Ну а поскольку быстрый рендер из тринити не имеет в себе этих фич, соответственно он вообще никак не совместим с CS и вся идея нереализуема. Так что придётся смириться :dntknw:
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу