![]() |
Показать все 54 сообщений этой темы на одной странице |
HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Увеличение размеров карты (https://hlfx.ru/forum/showthread.php?threadid=5033)
Увеличение размеров карты
Доброго времени суток всем, кто ещё моддит, ну или просто почитывает периодически этот форум. Так как в разработке своего долгостроя я достиг критической точки, после которой внесение каких-либо масштабных изменений в код будет грозить массовой переделкой всех карт, сейчас нужно определиться, в каком масштабе эти карты строить.
Можно ничего не трогать, и работать со стандартной сеткой 8192х8192х8192, но есть несколько наработок, которые требуют, как минимум, более длинных (в одном измерении) карт. Выходов из ситуации есть два. Первый: обойти ограничение на 8192 юнита в дллках и delta.lst. Второй: уменьшить все объекты в игре в два раза, и работать со стандартной сеткой в уменьшенном масштабе.
И то, и другое реализуется без особых проблем. Но и то, и другое имеет различные минусы. Минус обхода ограничения - надо писать свою собственную мессагу для темпэнтить. А возможно, и ещё какие-то мессаги переделывать, чтобы координаты правильно передавались по сети. Минус уменьшения масштаба - нужен хак с размерами хуллов, и задержка падения энтить на пол до спавна первого игрока на сервере.
В общем, куда ни кинь - всюду клин. Вариант с масштабом на самом деле предпочтительнее, т.к. если уж вдруг придётся ЕЩЁ увеличить карту, то можно будет применить поверх него снятие ограничения на размер. Правда, такой сценарий мне слабо представляется, разве что за пределами 8192 юнитов будет не игровая, а декоративная часть карты с плавным переходом в 3д небо.
Собственно, к чему все эти рассуждения? При каком из вариантов выше шанс вылезти за лимиты компиляторов? Я не о том, чтобы заваливать всю карту деталями, а о неожиданных ошибках, связанных со скейлом текстур/лайтмап и лимитах. Есть у кого-нибудь соображения? Конечно, я ещё сам протестирую пару карт на предмет оптимизации, но хотелось бы услышать мнения.
В разумных пределах масштабирование даёт сравнимый эффект, например, в халфе камера на высоте 72 юнита, а в кваке - 56 юнитов, но громадные квейковские карты с халфовской точки зрения кажутся тесными и игрушечными А ведь хуллы даже почти совпадают.
Добавлено 09-08-2017 в 10:52:
Изменения для корректной потдержки больших размеров карт можно поискать в ксаше по строчке ENGINE_WRITE_LARGE_COORD.
Их там весьма немного: длина трассы до скайбокса, чтобы взять освещение от неба, а не с земли. sv_zmax максимальный становится 131070 или около того ну и пресловутый WriteCoord. Внутри халфы он используется, например для декалей, звуков и партиклей. Ну их тоже можно переделать на кастомные, а на клиенте вызывать эти звуки или партиклы. А амбиент саунд, это обычный саунд с каналом CHAN_STATIC.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша спасибо, что упомянул про некоторые изменения. Работы выходит довольно много, особенно с кастомными мессагами. Так что я использую уже отработанный вариант с масштабированием. И если уж захочется ещё увеличить, то сниму ограничения на размер, но темпэнтити, декали и всякое разное за пределами старых размеров располагать не буду, пусть там будет только ландшафт.
В общем, буду активно мапать "маленькие" карты.
Дядя Миша у меня попутный вопросец возник: я в теме про глобальное изменение масштаба упоминал про неправильный скейл хитбоксов по ключу $scale при компиляции моделей. То есть сама модель скейлится, а хитбоксы остаются тех же размеров, что и прописаны в qc-файле. Только если отскейлить модель во вьювере и пересохранить, они уменьшаются.
Ты не выкладывал сорцы своего studiomdl с поддержкой тайлинга и увеличенными лимитами? Я бы попробовал исправить для себя этот баг. Ну и по Motion Extraction хотелось бы что-то придумать тоже на этапе компиляции. А то уч0ные ростом 36 юнитов бегают со скоростью как при 72 юнитах, приходится в самом коде монстров использовать хак:
1 | DispatchAnimEvents( flInterval ); |
2 | #ifdef _HALFSCALE |
3 | flInterval *= 0.55; |
4 | #endif |
5 | if ( !MovementIsComplete() ) |
6 | { |
7 | Move( flInterval ); |
8 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Ну я создал тему, но всем было настолько наплевать, что я не стал её продолжать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А, это... Ну понятно.
Да у нас тут вообще всем на всё наплевать по большей части.
__________________
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro
Если я правильно понимаю, то донаты должен засылать не я, а мне. Так?
__________________
Ещё один вопрос. Есть жёсткий лимит на 512 моделей (браши + спрайты + студио), на больших картах это может быть весьма актуально. Со спрайтами просто: можно запаковать несколько с одинаковой палитрой в один файл и управлять рисованием с помощью кадров. Со студийными тоже просто: бодигруппы + секвенции = несколько моделей в одной. А как быть с брашами? Квейк может грузить маленькие bsp файлики как модели, некоторые итемы там так и сделаны. Халфа по-моему не дублирует одинаковые брашевые энтити как разные модели. А что, если она умеет грузить bsp модели как Квака? Знаю, что ксаш умеет, а вот в халфе не пробовал.
Добавлено 16-08-2017 в 12:12:
Есть идея обойти лимит на всякое связанное с брашами (если лимит будет превышен) с помощью студио моделей (сначала сделаю в джеке, потом экспортну и сделаю из этого префаб в кхеде). Но это только для декораций, да и декали не будут лепиться на эти штуки. И вообще, лучше их делать несолидными, чтобы не превысить лимит на клипноды. А вот если бы все ящики (лампочки, двери) на карте грузить извне, было бы здорово.
Ku2zoff "использование BSP ресурсов" на КСМ
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Crystallize а можно прямую ссылку? Что-то не гуглится и поиском по форуму не находится.
Получилось. Пушабля из внешнего bsp загружается, её можно толкать, но она невидимая.
Ku2zoff http://cs-mapping.com.ua/forum/showthread.php?t=28721
сам еле нашёл
Crystallize ну это прям грязный хак какой-то. env_sprite для прекэша использовать... Я прекэшу прям в коде. Грузится, работает и осязается. Только не видно.
Ещё в этом туторе есть минус: если на нашей карте есть брашевая модель с именем, таким же как и в загружаемой сторонней карте, тады ой.
Добавлено 17-08-2017 в 14:12:
Обернул ящик в пустой браш, сделал свет. Откомпилил с визом и радом. Теперь его видно. Но вставляется в качестве модели вся карта, а не только ящик. Не смог нагуглить никаких туторов по кваке, как правильно делать итемы маппингом. С параметром hlbsp.exe -nofill компилится нормально, но нет освещения - браш чёрный.
Добавлено 17-08-2017 в 14:42:
Разобрался Вот описание действий вкратце:
1. Создаём пустую карту. В центре создаём нужный нам браш. Обставляем его лайтами со всех сторон, чтобы он был освещён.
2. Компилим hlcsg, hlbsp и hlrad. hlvis не используем, он не сработает, и не даст сработать hlrad (т.к. у нас нет "неба" вокруг ящика). Для hlbsp выставляем параметр -nofill, чтобы компилятор не срезал фейсы нашего браша, как торчащие наружу карты. Игнорируем варнинг с отсутствием prt файла, если он выскакивает (в Джеке так).
3. Собственно, установка на карту. Создаём точечную энтитю с класснеймом брашевой. Добавляем вручную ключ model, и в нём прописываем путь до мини-карты (maps/crate.bsp, например).
3(1). Если у вас чистая халфа, то нужно мини-карту каким-то образом прекэшить. Подойдёт тот же env_sprite, или вообще любая энтить, где можно в свойствах указать путь к модели. Указываем maps/crate.bsp, как и в ключе model нашей браш-точечной энтити.
3(2). Если мод свой, то достаточно в коде нашей брашевой энтити добавить перед вызовом SET_MODEL( ENT(pev), STRING(pev->model) ); строку прекэша: PRECACHE_MODEL((char *)STRING(pev->model));
4. Запускаем и проверяем.
Ограничения всё те же, что и для обычных браш-энтить: не меняется уровень освещённости при перемещении по карте.
Добавлено 17-08-2017 в 14:51:
Тестовые карты в аттаче. Не забудьте про прекэш! Я делал его в коде.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша а что за неопределённость? Как по мне, то вполне неплохо можно делать таким образом зарядники здоровья и брони, поезда и всякое, что повторяется на разных картах.
Добавлено 17-08-2017 в 21:38:
И танк как в инвазионе можно тоже сделать такими же брашами. Башню отдельно, корпус отдельно. Прекэшить и грузить бспшки прямо из кода.
Ну потому что во первых паренты, во вторых переход скрозь уровни. А в третьих (это самое стрёмное) - рекурсия. Начнут вкладывать префабы в префабы, а потом орать что энтити внезапно кончились на карте.
К тому же при таком подходе начнутся проблемы с пространством имён и джек эти префабы не сможет корректно отображать, я уже общался с Ксероксом и он подтвердил - да, не сможет.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Это в будующем релизе
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Fatal Error: D:\Steam\steamapps\common\Half-Life\coop_mod\sdk\models\scientist\.\/AX.smd doesn't exist |
1 | $sequence "helicack" "helicack" AX AY AZR fps 18 { |
2 | { event 1003 9 "gunmedown" } |
3 | { event 1000 9 } |
4 | { event 1008 4 "*scientist/sci_pain4.wav" } |
5 | } |
Fatal Error: D:\Steam\steamapps\common\Half-Life\coop_mod\sdk\models\scientist\scientist.qc(231): - ParseAnimationToken: fps (0.000000 from '0') <= 0.0 |
1 | $sequence "helicack" "helicack" fps 0 { |
2 | { event 1003 9 "gunmedown" } |
3 | { event 1000 9 } |
4 | { event 1008 4 "*scientist/sci_pain4.wav" } |
5 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша ладно, так и быть почитаю Подскажи мне, пож, можно ли не отправляя мессагу с сервера, активировать ScreenShake на клиенте? Или таки придётся писать свою собственную кастомную мессагу, чтобы движок её не перехватывал?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Итак, провёл эксперимент. Объединил шесть карт из Ретрибьюшена (сорцы жы есть) в одну. В принципе, всё нормально. Компилится правда долго, но это из-за некоторых косяков на самих картах. Почти упёрся в лимит по клипнодам. Это решаемо использованием текстуры clip где надо. И таки упёрся в лимит по моделям. Ну это решаемо либо использованием всяких func_wall по минимуму (довольно много из них я перегнал в мир), либо использованием студийных пропов. И моё предположение подтвердилось: одинаковые брашевые модели довольно часто дублируются. Так что смысл в подгрузке внешних BSP есть. Ещё можно самой дллкой прекэшить по минимуму моделей и спрайтов.
Добавлено 07-09-2017 в 00:10:
Кстати, зачем юзать func_wall для избежания разбиения поверхностей, когда VHLT умеет func_detail? func_wall в таком случае нужны только для объектов с особыми рендермодами или с переключающимися текстурами (выключаемые лампы, например).
Добавлено 07-09-2017 в 00:12:
Короче говоря, пора мапперить в полную силу, дописывая по пути нужный код
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
1 | models 387/512 24768/32768 (75.6%) |
2 | planes 7259/32768 145180/655360 (22.2%) |
3 | vertexes 16014/65535 192168/786420 (24.4%) |
4 | nodes 6358/32767 152592/786408 (19.4%) |
5 | texinfos 4397/32767 175880/1310680 (13.4%) |
6 | faces 11549/65535 230980/1310700 (17.6%) |
7 | * worldfaces 8194/32768 0/0 (25.0%) |
8 | clipnodes 18693/32767 149544/262136 (57.0%) |
9 | leaves 4430/32760 124040/917280 (13.5%) |
10 | * worldleaves 1726/8192 0/0 (21.1%) |
11 | marksurfaces 14511/65535 29022/131070 (22.1%) |
12 | surfedges 53901/512000 215604/2048000 (10.5%) |
13 | edges 27029/256000 108116/1024000 (10.6%) |
14 | texdata [variable] 4781628/33554432 (14.3%) |
15 | lightdata [variable] 0/50331648 ( 0.0%) |
16 | visdata [variable] 0/8388608 ( 0.0%) |
17 | entdata [variable] 143527/2097152 ( 6.8%) |
18 | * AllocBlock 28/64 0/0 (43.8%) |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша я знаю. В обычной халфе около сотни спрайтов и моделей кэшируются сервером. Это кол-во можно уменьшить по методу HLWE. Ну и ещё кое-что грузить только на клиенте. Спрайты эффектов, например, или звуки игроков (как радио в кс).
Ku2zoff ты под WON-халфу ориентируешься? В стим-халфе параметр max_edicts уже давно можно прописать в liblist.gam. И он же лимит на модели расширяет.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вообще говоря, в стим-версии халфы, наверное даже и менять ничего не надо, там уже по дефолту лимит в 1024 модели.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ku2zoff просто проверь на стим-версии
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша ну ок. Специально наклонирую моделей с разными именами, и засуну их все в ClientPrecache. Аж интересно стало. А MAX_MAP_MODELS таки всё равно 512 оставили наверное.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Временная зона GMT. Текущее время 07:37. | Показать все 54 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024