HLFX.Ru Forum
Показать все 45 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- delta.lst, размеры карты и эффекты взрывов (пока что) (https://hlfx.ru/forum/showthread.php?threadid=4413)


Отправлено avegamer 25-05-2014 в 07:34:

Red face delta.lst, размеры карты и эффекты взрывов (пока что)

Возникла у меня такая проблема при расширении размеры карты :
увеличивая размер карты кодингом и через delta.lst не отображаются эффекты и звуки взрывов за пределами 8192*8192*8192, а эффекты от выстрелов есть. Издевался я над delta.lst, даже брал из sven coop, но ничего не получается . Может кто знает решение такой проблемы . Для компиляции карт я, кстати, использовал VHLT 33

__________________
[XDaemon dev.]


Отправлено master07 25-05-2014 в 07:48:

Мне интересно, а зачем вам больше 8192*8192*8192? Карта будет вся лагать и на ней не будет никто играть, наверно.


Отправлено avegamer 25-05-2014 в 07:50:

Я увеличил пока до размеров 32768*32768*32768 и у меня ничего не лагает

__________________
[XDaemon dev.]


Отправлено master07 25-05-2014 в 07:52:

Ну вы же будете ещё строить карту таких размеров, тогда да, будет лагать. А так это новое пустое пространство, а сами будете творить карты меньше 8192*8192*8192


Отправлено XaeroX 25-05-2014 в 07:55:

master07
Каким образом лаги связаны с линейным размером карты в юнитах?
Анриал вон не лагает почему-то, неужто магия?
Почему-то когда говорят об увеличении лимита размера карты, всем представляется именно куб, равномерно заполненный детализацией и энтитями, ну в лучшем случае - параллелепипед определённой высоты. Может, автор хочет сделать длиннющий коридор?

avegamer
Функцию IsInWorld поправил?

__________________

xaerox on Vivino


Отправлено master07 25-05-2014 в 07:58:

Я не про пустое пространство. Я понимаю, что пустота фпс не жрёт. Я про то, что если avegamer будет делать детализированную карту с размером на 30000*30000*30000 халфа, может быть и вылетит.


Отправлено avegamer 25-05-2014 в 08:00:

Лагать карта будет, если поставить небольшим предел видимости на карте, или как оно там называется. Ну, у меня лагало только в этом случае . Я его вычисляю максимальным таким образом

sqrt( sqr(map_x_length) + sqr(map_y_length) + sqr(map_z_length)), ну так условно

__________________
[XDaemon dev.]


Отправлено master07 25-05-2014 в 08:01:

Xaerox А про длинный коридор, я же не знал. Может avegamer хочет сделать такое.


Отправлено avegamer 25-05-2014 в 08:12:

А, кстати IsInWorld, я изначально исправил, и ввёл команду sv_worldrange 1 ( хотя надо было назвать как-то по другому ), чтобы переключаться между стандартными размерами карты и расширенными прямо во время игры ( чисто для проверки )

Добавлено 25-05-2014 в 12:12:

А ничего что я использую последний Half-Life SDK вместо HLSDK 2.3, в котором у меня была та же самая проблема?

__________________
[XDaemon dev.]


Отправлено XaeroX 25-05-2014 в 08:52:

avegamer
Опиши конкретно, что пропадает: какие эффекты и т.п.
И что ты изменил в делта.лст? По тутору с хлру делал?
http://half-life.ru/forum/showthrea...=&threadid=2568

__________________

xaerox on Vivino


Отправлено avegamer 25-05-2014 в 09:10:

Вот мой издевательский вариант delta.lst - увеличил по максимуму всё, что считал нужным ( с запасом )

Добавлено 25-05-2014 в 13:10:

В данный момент пропадают спрайты эффектов после взрыва гранаты RPG, ручной гранаты, satchel и tripmine. Проверяю пока со стандартным оружием, своё пока не вносил. Кстати, включил шейдеры текстур карты с am.half-lifecreations.com ( компилировал в Release'е ) и они отображаются даже с такими увеличенными размерами карты.

__________________
[XDaemon dev.]


Отправлено Дядя Миша 25-05-2014 в 10:52:

Главная лажа -это WRITE_COORD, через который собственно идут все эти темпэнтити. Он клампит свои результаты на 8192. в ксаше мне удалось его забороть, путём уменьшения точности переданной координаты. А в халфе...
Наверное надо свою мессагу писать gmsgTempEntity, только так.

__________________
My Projects: download page

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

Цитата:

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


Отправлено avegamer 25-05-2014 в 11:54:

То есть, вместо WRITE_COORD нужно использовать что-то другое и закодировать координату в другом типе данных, а уже на клиенте раскодировать? А сообщение нужно такого вида использовать -

MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, pev->origin );

или какое-то другое?

Добавлено 25-05-2014 в 15:54:

Если так, то тогда придётся всю функцию WRITE_COORD придумывать заново, не затрагивая движок. А движок не будет кричать, чего никто никаких координат не шлёт ?

__________________
[XDaemon dev.]


Отправлено Дядя Миша 25-05-2014 в 12:49:

Через WRITE_LONG можно передавать полноценный флоат, безо всякой химии.

Цитата:
avegamer писал:
MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, pev->origin );

SVC_TEMPENTITY заменить на gmsgTempEntity, которую зарегать через
REG_USER_MSG. Основная беда в том, что все мессаги SVC_TEMPENTITY читаются внутри движка, а выход из положения в том, что в EfxAPI, есть практически все функции, которые можно вызывать самому.
Посмотри как в ксаше устроена мессага SVC_TEMPENTITY (cl_tent.c в конце файла). Попробуй адаптировать к клиенту.

Добавлено 25-05-2014 в 16:49:

А вот нашёл частично адаптированную из XashNT. Всё равно править придёца, но хоть писать поменьше.

__________________
My Projects: download page

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

Цитата:

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


Отправлено avegamer 25-05-2014 в 13:48:

А такой WRITE_COORD подойдёт в данном случае

void WRITE_COORD(float flValue)
{
float x = flValue;
int y;
__asm
{
push edx
push eax
mov edx, dword ptr x
mov eax, [edx]
mov [y], eax
pop eax
pop edx
}
WRITE_LONG( y );
}

__________________
[XDaemon dev.]


Отправлено XaeroX 25-05-2014 в 13:50:

avegamer
READ_COORD ты как менять собрался? она тоже в движке. Тут надо полностью кастомную систему создания темпэнтить делать, благо есть pEfxAPI.

__________________

xaerox on Vivino


Отправлено avegamer 25-05-2014 в 14:04:

В HLSDK такие вот функции для чтения координаты и угла (parsemsg.cpp) - тут что, теряется точность?

float READ_COORD( void )
{
return (float)(READ_SHORT() * (1.0/8));
}

float READ_ANGLE( void )
{
return (float)(READ_CHAR() * (360.0/256));
}

Чего-то мне это не нравиться. Думаю, может переписать. В Valve ещё бы придумали использовать fixedpoint

__________________
[XDaemon dev.]


Отправлено Дядя Миша 25-05-2014 в 14:11:

C++ Source Code:
#define WRITE_FLOAT( x ) WRITE_LONG( (int *)&x )

не усложняй, например.

Добавлено 25-05-2014 в 18:10:

Цитата:
XaeroX писал:
READ_COORD ты как менять собрался? она тоже в движке

Не, на клиенте

Добавлено 25-05-2014 в 18:11:

Ну в смысле, весь парсинг темп-энтить вынести в клиентку, как я выше написал.

__________________
My Projects: download page

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

Цитата:

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


Отправлено ~ X ~ 25-05-2014 в 14:20:

Только так.
И что, вы тут все добились отрисовки монстров, лучей, эффектов и мувевыджа за пределами +-4096^3? Мне даже интересно стало, учитывая размах моих сингл-карт.

На данный момент я сделал совсем обратное - обрезал WRITE_COORD до 4095 чтобы не было врап-эффекта (особенно для лучей).

Мессаги переписывать - можно, но ИМХО это уже хак. А ВДРУГ вальве решит внести изменения в тэмпентити пока мы тут балуемся? %)

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено Дядя Миша 25-05-2014 в 15:04:

Цитата:
~ X ~ писал:
И что, вы тут все добились отрисовки монстров, лучей, эффектов и мувевыджа за пределами +-4096^3?

Ну это единственное ограничение в движке, которое мешает наступлению светлого будущего. Остальное всё в дельте.

__________________
My Projects: download page

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

Цитата:

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


Отправлено avegamer 25-05-2014 в 15:20:

Возникает такая ошибка Host_Error: UserMsg: Not Present on Client при активации, например, satchel, если использовать только изменённый WRITE_COORD. Просто проверил. Буду разбираться дальше...

__________________
[XDaemon dev.]


Отправлено avegamer 26-05-2014 в 10:26:

А может быть с сообщением SVC_TEMPENTITY дополнительно пересылать сообщение с более точными координатами
MESSAGE_BEGIN( MSG_ONE, gmsgTempEntityPrecise, pev->origin );
Для SVC_TEMPENTITY я так понимаю кроме MSG_PVS ничего больше нельзя

__________________
[XDaemon dev.]


Отправлено ~ X ~ 26-05-2014 в 12:06:


avegamer ты хоть понимаешь что такое SVC_TEMPENTITY и кто его принимает?
Про MSG_PVS/прочее пока не будем.

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено XaeroX 26-05-2014 в 12:39:

Цитата:
avegamer писал:
Для SVC_TEMPENTITY я так понимаю кроме MSG_PVS ничего больше нельзя

SVC_TEMPENTITY это обычный мультикаст, всё там можно.

__________________

xaerox on Vivino


Отправлено Ghoul [BB] 26-05-2014 в 13:18:

Послежу за темкой.
Коли добьётесь работы карты 32*32, будет интересно сотрудничать в плане переноса этого фикса в Тириан.

__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.

Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo


Отправлено avegamer 29-05-2014 в 08:02:

Я так думаю, нужно только менять сообщения связанные с MSG_PVS, а остальные не трогать.

MESSAGE_BEGIN( MSG_ALL, gmsgTempEntityPrecise, ...

__________________
[XDaemon dev.]


Отправлено XaeroX 29-05-2014 в 08:24:

Цитата:
avegamer писал:
нужно только менять сообщения связанные с MSG_PVS, а остальные не трогать.

А как же MSG_PAS?

__________________

xaerox on Vivino


Отправлено avegamer 29-05-2014 в 08:51:

А что MSG_PAS тоже надо?

Добавлено 29-05-2014 в 12:49:

Я просто думал, что одни сообщения будет обрабатывать движок, а другие клиент. Ещё не разобрался, какие сообщения менять, а какие нет. Когда сделаю temp-енитити на клиенте, тогда я думаю, будет понятно.

Добавлено 29-05-2014 в 12:51:

Тут вот приходится часть кода брать из XASH, чтобы понять что делать на клиенте.

__________________
[XDaemon dev.]


Отправлено ~ X ~ 29-05-2014 в 09:41:

avegamer за эти дни просто можно было вычитать, что такое флаги MSG_PAS и MSG_PVS, и как они влияют на доставку сообщений. Самое забавное, что PVS и PAS - это сокращения, которые сами за себя говорят.
Погляди дефинишен ф-ии pfnMessageBegin, и что у неё за параметры что-ли.

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено XaeroX 29-05-2014 в 10:02:

Цитата:
~ X ~ писал:
PVS и PAS - это сокращения, которые сами за себя говорят.

Угу, PVS = Program Verification Systems, PAS = файлы Pascal.

__________________

xaerox on Vivino


Отправлено avegamer 03-06-2014 в 12:49:

Вот что у меня получилось, но вылеты происходят всё равно. Файл в аттаче.
Всё содержимое файла в архиве я добавлял в hud_msg.cpp

в hud.cpp -

C++ Source Code:
1
int __MsgFunc_TempEntityPrecise(const char *pszName, int iSize, void *pbuf)
2
{
3
  gHUD.MsgFunc_TempEntityPrecise( pszName, iSize, pbuf );
4
  return 1;
5
}


в hud.h к другим msgfunc -

C++ Source Code:
int _cdecl MsgFunc_TempEntityPrecise( const char *pszName, int iSize, void *pbuf );


Пока испытывал на MSG_PVS. Сообщения с MSG_PVS, SVC_TEMPENTITY менял на MSG_ONE, gmsgTempEntityPrecise

В player.cpp конечно же добавил к другим gmsg -

C++ Source Code:
int gmsgTempEntityPrecise = 0;


и в void LinkUserMessages( void ) -

C++ Source Code:
gmsgTempEntityPrecise = REG_USER_MSG("TempEntityPrecise", -1);


Из-за какой ошибки вылеты пока не знаю. Может быть в конце MESSAGE_BEGIN нужно задать NULL...

Короче нужна помощь...

__________________
[XDaemon dev.]


Отправлено FiEctro 03-06-2014 в 16:10:

ДМ просил передать что максимум 12 символов в имени должно быть.

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


Отправлено XaeroX 03-06-2014 в 17:06:

Цитата:
FiEctro писал:
ДМ просил передать

Ты передаст, что ли?
Передастов у нас не любят.

__________________

xaerox on Vivino


Отправлено avegamer 03-06-2014 в 21:54:

Цитата:
FiEctro писал:
ДМ просил передать что максимум 12 символов в имени должно быть.


А и точно, забыл про это

Добавлено 04-06-2014 в 01:54:

А вылеты то происходят всё равно, даже при использовании стандартных WRITE_COORD и READ_COORD

__________________
[XDaemon dev.]


Отправлено ~ X ~ 04-06-2014 в 13:10:

Кстати, в ХЛ1110 максимум 127 юзер-сообщений. Проверь, не слишком ли их много.

Кстати, всегда интересовало: а на что вообще влияет размер в REG_USER_MSG? Дополнительные проверки на целостность?

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено Ghoul [BB] 04-06-2014 в 19:14:

Цитата:
~ X ~ писал:
Кстати, в ХЛ1110 максимум 127 юзер-сообщений. Проверь, не слишком ли их много.


Это вот этих что ли?

gmsgCurWeapon = REG_USER_MSG("CurWeapon", 3);
gmsgFlashBattery = REG_USER_MSG("FlashBat", 4);
gmsgHealth = REG_USER_MSG("Health", 2);
gmsgDamage = REG_USER_MSG("Damage", 7);
gmsgBattery = REG_USER_MSG("Battery", 2);
gmsgLogo = REG_USER_MSG("Logo", 1);
gmsgHudText = REG_USER_MSG("HudText", -1);
gmsgSayText = REG_USER_MSG("SayText", -1);

__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.

Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo


Отправлено avegamer 23-06-2014 в 10:57:

Я думаю можно решить частично сложившуюся проблему, не создавая новую систему temp-ентитей. Например, применимо к взрывам, с TE_EXPLOSION использовать то, что работает за пределами стандартного размера карты с проверкой на предел 8192, а звук воспроизводить с помошью fmodex. Спреи пока не знаю чем заменить.

__________________
[XDaemon dev.]


Отправлено ~ X ~ 23-06-2014 в 11:57:

avegamer

А позицию этих спецфиектров ты как будешь узнавать?

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено PRoSToTeM@ 23-06-2014 в 12:59:

Цитата:
~ X ~ писал:
а на что вообще влияет размер в REG_USER_MSG?

На то, что он будет передаваться в пакете или нет.

Добавлено 23-06-2014 в 16:59:

При -1 размере в REG_USER_MSG в пакеты этой мессаги добавляется байт для указания размера данных.


Отправлено ~ X ~ 23-06-2014 в 14:27:

PRoSToTeM@ т.е. разница просто в каком уровне инкапсуляции данных будет находиться байт размера? Смешно они придумали. -_-

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено PRoSToTeM@ 23-06-2014 в 15:01:

~ X ~ ага, либо мы знаем размер изначально, либо получаем с мессагой.


Отправлено Ku2zoff 23-06-2014 в 15:33:

А никто не пробовал у меньшить размер точечных энтить относительно размера карты? Чтоб они стали в два раза меньше? Компиляторы подправить, чтобы хуллы правильно считались, fov и viewheight у игрока поменять? Просто мапперить надо будет помельче Вон, в HLRally так сделано.


Отправлено XaeroX 23-06-2014 в 15:39:

Ku2zoff
В любом случае это ведёт к потере точности передачи координат.

Цитата:
~ X ~ писал:
Смешно они придумали

Экономия целого байта на мессагу. Учитывая, что многие мессаги занимают всего несколько байт - имхо, нормальная оптимизация.

__________________

xaerox on Vivino


Отправлено ~ X ~ 23-06-2014 в 17:45:

XaeroX когда и где экономия? В одном случае его пишешь ты, в другом - движок. Не вижу разницы.

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено XaeroX 23-06-2014 в 17:56:

~ X ~
Элементарно, ватсон. Если миссаго фиксированного размера, движок сообщает его клиенту один раз, при сигнон-диалоге. Если размер -1, движок вписывает байт размера в каждую отправленную миссагу.

__________________

xaerox on Vivino


Временная зона GMT. Текущее время 20:31.
Показать все 45 сообщений этой темы на одной странице

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