HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Нубские вопросы от <censored> и других нубов (https://hlfx.ru/forum/showthread.php?threadid=4535)
Отправлено ncuxonaT 23-04-2020 в 12:17:
Дядя Миша так я и запишу. Вопрос в том, как быть с текстурами. У одного материала цвет задан числами, а у другого - текстурой. Нужно как-то выбирать
Отправлено Дядя Миша 23-04-2020 в 12:30:
Да сама система эта порочная числа-текстуры. Отсюда и всё дерьмо.
Я бы сделал через убер-шейдеры с #ifdef к примеру.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено ncuxonaT 23-04-2020 в 12:34:
Дядя Миша понимаю, что порочная, но не вижу альтернативы. #ifdef не подходит, луч может попасть в любой материал, нужно иметь доступ ко всем сразу
Отправлено Дядя Миша 23-04-2020 в 12:58:
Так что ты надеешься услышать? Без условия очевидно не обойтись.
Ну хочешь - нагенерь мини-текстур в один цвет, засунь их на место диффузок, сравни как быстрее. Проиндексируй эти цвета, чёб не дублировать эти 16-пиксельные текстуры с одинаковым цветом.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено ncuxonaT 23-04-2020 в 13:15:
Дядя Миша надеялся услышать что-то типа "эээ, не делай через условия, это убьет перформанс, делай через минитекстуры, это будет быстро и универсально". Ну или наоборот
Отправлено Ku2zoff 23-04-2020 в 13:52:
Цитата:
Дядя Миша писал:
Если декаль нанести на край стены, то она будет висеть в воздухе.
Ну это можно каким-нибудь образом поправить. Например, не накладывать декаль на край, а сдвигать её подальше, чтобы она полностью была на стене. Не очень изящно, зато не будет резать глаза. Кстати, вчера научил декали ходить через чейнджлевел. Сейв/рестор им я давно уже сделал, писал выше. В общем, осталось красиво причесать код, и он будет вполне юзабелен.
Не будет лениво - сделаю апдейт для самого Инвазиона, с фиксом декалей и мп3 плеера. Надо хоть когда-нибудь выложить свою работу на моддб. Заодно будет масштабная тестовая площадка. Инвазион - немаленький мод.
Отправлено Дядя Миша 23-04-2020 в 14:57:
Цитата:
ncuxonaT писал:
надеялся услышать что-то типа
мини-текстурки тормозить точно не будут. А убьют ли условия перфоманс зависит от поколения железа. Да и условия-то разные бывают. Я код не видел, почём я знаю.
Цитата:
Ku2zoff писал:
Ну это можно каким-нибудь образом поправить
ну так известно каким - обрезать полигон декали по краю. Для этого не нужны какие-то хитрые функции из движка. Ты же всё равно их через три апи рисуешь - этого вполне достаточно. А обрезалка - это виндинг.
Ну посмотри как в параное сделано чтоли.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Ku2zoff 26-04-2020 в 16:32:
Есть ли способ определить на сервере, стоит игра на паузе или нет? На клиенте есть ref_params_s->paused. На сервере в глобалсах ничего подобного нет. Пока что мне не пришло в голову ничего умнее, чем нагородить дурацкий огород:
C++ Source Code:
1 | DLL_GLOBAL ULONG g_ulPostFrameCount; |
3 | void PlayerPreThink( edict_t *pEntity ) |
5 | entvars_t *pev = &pEntity->v; |
6 | CBasePlayer *pPlayer = (CBasePlayer *)GET_PRIVATE(pEntity); |
11 | if (g_ulPostFrameCount > g_ulFrameCount) // StartFrame не вызывается, g_ulFrameCount не растёт, игра на паузе |
12 | ALERT(at_console, "Paused\n"); |
15 | void PlayerPostThink( edict_t *pEntity ) |
17 | entvars_t *pev = &pEntity->v; |
18 | CBasePlayer *pPlayer = (CBasePlayer *)GET_PRIVATE(pEntity); |
21 | pPlayer->PostThink( ); |
26 | void StartFrame( void ) |
29 | g_pGameRules->Think(); |
34 | gpGlobals->teamplay = teamplay.value; |
37 | g_ulPostFrameCount = g_ulFrameCount; |
Добавлено 26-04-2020 в 23:32:
Вот, немного дописал. Пауза детектится через две секунды, чтобы не было случайных срабатываний из-за рассинхрона. Учитывает игровой фпс, кстати.
C++ Source Code:
float flSecond = 0.96 / gpGlobals->frametime; |
if (g_ulPostFrameCount > g_ulFrameCount + int(flSecond * 2.0)) |
ALERT(at_console, "Paused\n"); |
Отправлено Дядя Миша 26-04-2020 в 18:13:
gpGlobals->frametime == 0.0
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Ku2zoff 26-04-2020 в 18:16:
Дядя Миша неа. Не работает, я пробовал. Даже на паузе фреймтайм равен 0.016xxxx при 60 фпс. Может быть это потому что стим версия?
Отправлено Дядя Миша 26-04-2020 в 18:37:
А не, в халфе на сервере фреймтайм по идее будет всегда валидным.
Ну тогда чуть сложнее
C++ Source Code:
2 | if( gpGlobals->time == oldtime ) |
6 | oldtime = gpGlobals->time; |
Добавлено 26-04-2020 в 21:37:
Проверять в CmdStart__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Ku2zoff 26-04-2020 в 18:37:
Спасибо за подсказку. Теперь серверный фмод в инвазионе имеет паузу:
C++ Source Code:
5 | void PlayerPostThink( edict_t *pEntity ) |
7 | entvars_t *pev = &pEntity->v; |
8 | CBasePlayer *pPlayer = (CBasePlayer *)GET_PRIVATE(pEntity); |
11 | pPlayer->PostThink( ); |
13 | g_MusicPlayer.SetVolume(); |
15 | if (gpGlobals->time == oldtime) |
16 | g_MusicPlayer.Pause(TRUE); |
18 | oldtime = gpGlobals->time; |
21 | void StartFrame( void ) |
24 | g_pGameRules->Think(); |
29 | gpGlobals->teamplay = CVAR_GET_FLOAT("teamplay"); |
30 | g_iSkillLevel = CVAR_GET_FLOAT("skill"); |
33 | if (gpGlobals->time != oldtime) |
34 | g_MusicPlayer.Pause(FALSE); |
Пришлось раскидать вызовы паузы по разным функциям, потому что фмод включает паузу где-то через полсекунды после постановки на паузу игры (на клиенте так же). Поэтому получается не пауза, а бесконечное заикание, потому что пауза с музыки сразу же снимается.
Отправлено Дядя Миша 26-04-2020 в 20:34:
Ku2zoff эх, ты бы лутьше декалям клиппинг сделал 
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Ku2zoff 27-04-2020 в 06:54:
Дядя Миша ну дык собираюсь. Уже неплохо оптимизировал саму структуру spritedecal_s, чтобы как можно меньше параметров писать в клиентский сейв, вынул функции работы с декалями из gHUD.m_Particules в отдельный класс CDecalManager, избавился от нагромождения iIndex, iIndexNew, oldindex и кучи лишних циклов, перебирающих несколько раз декали по этим индексам... По сути, уже всё довольно неплохо: сохраняются, загружаются, переходят через уровни. Осталось сделать статик-декали, которые накладывает маппер. Ну и обрезку на краях брашей.
Добавлено 27-04-2020 в 13:54:
Правда, насчёт статик-декалей не всё так однозначно. Для них надо ещё как-то нарисовать спрайты.
Отправлено Дядя Миша 27-04-2020 в 08:51:
Кстати говоря, то что фмод делает паузу с лагом в полсекунды, обусловлено размером его выходного буффера, хотя это и не совсем корректно.
Ну вообщем посмотри, там где-то этот буффер будет задан как 500-600 милисекунд. Меньше ста ставить не рекомендую.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'