HLFX.Ru Forum Страницы (2): [1] 2 »
Показать все 21 сообщений этой темы на одной странице

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=1601)


Отправлено Drakulla 25-11-2008 в 17:55:

Half-Life Разброс пуль

{
// Мне нужен тутор по созданию ефекта разброса пуль ну как в контре -
када сидиш точно стреляет , чем больше двигаешся тем больше разброс при стрельбе . Можно еще и про отдачу .
}


Отправлено XaeroX 25-11-2008 в 18:20:

Что ты уже сделал в этом направлении? Какие идеи, наработки? Исходники поковырял?

__________________

xaerox on Vivino


Отправлено Drakulla 25-11-2008 в 18:34:

мне над для ознакомления


Отправлено XaeroX 25-11-2008 в 18:53:

Ты сам собираешься изучать СДК и разбираться с нашей помощью, или тебя интересует исключительно готовое?

__________________

xaerox on Vivino


Отправлено Drakulla 25-11-2008 в 19:34:

нет , меня интерисует сам код


Отправлено XaeroX 25-11-2008 в 19:36:

а... ну я такой код не встречал и сам не писал.

__________________

xaerox on Vivino


Отправлено FaL_DissecTor 25-11-2008 в 20:29:

Я начал с этого как раз таки. Но наверное из-за недостаточности знаний о том как там все действует и т.д.

Кароче говоря сначала то что я заметил в коде некоторых игр.
КС - Идут панчи, довольно просто - вверх, после какого-то момента несколько - из стороны в сторону. Сами же пули летят сами по себе, не похоже на разброс, такое ощущение что им уже описан путь с определенной вероятностью разброса. К примеру в той же параное - разброс делается чисто панчами+ разброс, и это не очень удобно с точки игры, слишком неудобно управлять таким разбросом. В кс же пули идут скорее всего по другому отдельно расчитанному вектору разброса, думаю там своя собственная функция разброса отличная от ХЛ-овской FireBulletPlayer (вроде).
А вот в сталкере к примеру разброс постоянен, изменяется модификаторами в режиме приседания, бега, прыжка. И панч идет простой - вверх (притом не возвращается). Такой разброс мне кажется сделать куда проще.

Что я попробывал сделать, но при этом кое какие баги есть (расхождение клиента и сервера скорее всего, пули летят в одном направлении, а декали рисуются в другом месте, где-то упустил вектор трассы который рисует декали).

Я сделал две функции довольно примитивного разброса.
void CAK47::SpreadItUp( void )
{
if (flSpreadInd >= 0.1) flSpreadInd = 0.1;
else flSpreadInd=flSpreadInd+0.02;
SpreadItDown();
}

void CAK47::SpreadItDown( void )
{

if (flSpreadInd==0.008)
{
pev->nextthink = gpGlobals->time + 5.0;
}
if ((0.008>=flSpreadInd) || (0.008 > flSpreadInd-0.1)) flSpreadInd=0.008;
else flSpreadInd=flSpreadInd-0.005;
SetThink( SpreadItDown );
pev->nextthink = gpGlobals->time + 0.2;
}

Соответсвенно в функции атаки
vecDir = m_pPlayer->FireBulletsPlayer( 1, vecSrc, vecAiming, Vector( flSpreadInd, flSpreadInd, flSpreadInd ) , 8192, BULLET_PLAYER_762MM, 0, 0, m_pPlayer->pev, m_pPlayer->random_seed );

и в конце атаки SpreadItUp(); //spread increases
(какой тег для кода С++?)
Вроде работало, хотя уже и не помню сколько раз менял это дело, где-то точно работало, пробывал.

Есть идея создать немного другую функцию. Точнее изменить существующую.

Кароче сделать массив из векторов описанных заранее (чтобы разброс был более предсказуемым), и изменить чуть чуть функцию FireBulletPlayer - добавть туда параметр "сила разброса" (то есть гду нужно увеличивать рандомность разброса, или же использовать это в качестве минимальной планки отклонения, чтобы пули не лезли туда куда не надо) .

Ну и значит, при выстреле вызываем функцию, она по заданной схеме выбирает вектор и возвращает его. И считается переменная какая-либо. Допустим таблица из 10 векторов, 3 из них должны повторятся, с 10ки перебрасываем на семерку и повторяем. При уменьшении разброса идем к началу массива.

Ну ещё приписать какой нибудь "модификатор движения" переменный коэфицент который менялся бы со сменой скорости и положения тела, а сам вектор из таблицы умножался бы на этот коэфицент(тем самым уменьшая разброс).

Ещё я не знаю как делать чтобы панч мог накладываться на предыдущий (в оригинале это только один раз происходит, то есть один скачек экрана, а следующий идет от центра опять же на то же расстояние). У Бузера в параное был этот кода, но там очень многобукаф +).

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

__________________
Такие дела...


Отправлено Drakulla 26-11-2008 в 12:49:

ага , ясно


Отправлено Друг Alermana 26-11-2008 в 13:10:

Цитата:
Drakulla писал:
ага , ясно

И что тебе ясно??


Отправлено Drakulla 26-11-2008 в 14:48:

што ето дело мутное..


Отправлено Друг Alermana 27-11-2008 в 06:17:

Цитата:
FaL_DissecTor писал:
(расхождение клиента и сервера скорее всего, пули летят в одном направлении, а декали рисуются в другом месте, где-то упустил вектор трассы который рисует декали

Просто стандартные векторы на клиенте задефинены, а вабще первый выстрел всегда в цель это как то даже бесит.


Отправлено FaL_DissecTor 27-11-2008 в 20:01:

У меня появились вопросы.

SetThink( SpreadItDown );
pev->nextthink = gpGlobals->time + 0.2;

Такое оущущение что эта функция не повторяется, слямзил из кода рпг, так что не уверен что она верна для данного случая. Как сделать правильно? Я в перезарядке задал принудительное обнуление разброса. Сейчас разброс увеличивается но не сужается, только при перезарядке.

Vector( flSpreadInd, flSpreadInd, flSpreadInd ) - вот тут у меня вопрос. Это вектор и три координаты его x,y,z как я понял. Начну с того что когда я ставил множитель для каждой координаты то наблюдал странные эффекты. Точно не готов сказать что это 100% верно но наблюдал такие вещи.
первая отвечает не за верх-низ, вторая за лево-право, за что отвечает третья? Она влияет на разброс, притом что разброс серьезно меняется когда она равна 0.0 и 1.0.

следующий.
написал такую дребедень

//*******
if (IN_JUMP) PosMod=10.0;
else if (IN_RUN) PosMod=1.5;
else if (IN_DUCK) PosMod=0.1;
else PosMod=1.0;
//*******

Как поняли PosMod это float переменная - коэфицент положения, незнаю насколько верно, но вроде не хочет работать =). Взял тоже из бошки.

DefilerUnit
Как бы объяснить, стреляю я значит с пушки, трассы и декали рисуются в центре как у мп5 к примеру, а зомбей которые находятся слева и справа(хорошенько так справа) убивает.

__________________
Такие дела...


Отправлено Друг Alermana 27-11-2008 в 21:14:

Цитата:
FaL_DissecTor писал:
Как бы объяснить, стреляю я значит с пушки, трассы и декали рисуются в центре как у мп5 к примеру, а зомбей которые находятся слева и справа(хорошенько так справа) убивает.

ГЫ у стандартных векторов еще в плеере идет вычисление...


Отправлено XaeroX 27-11-2008 в 23:36:

Цитата:
FaL_DissecTor писал:
Взял тоже из бошки.

Теперь подумай еще раз - в каких случаях условие в первом же if будет выполняться.
Подсказка: во всех

__________________

xaerox on Vivino


Отправлено FaL_DissecTor 28-11-2008 в 20:16:

XaeroX
эм косяк. Спасибо что указал, только я так и не пойму как правильно проверять на это условие (сам код). Это у меня развлекаловка, для себя, я не проггер, до всего приходится доходить самому или откуда-то тырить, если догадатся не получается. =)

ив я действительно не знаю отчего физ. полет пули отличается от графического. Физ. вроде нормально работает, а вот граф. только увеличивается.

__________________
Такие дела...


Временная зона GMT. Текущее время 20:30. Страницы (2): [1] 2 »
Показать все 21 сообщений этой темы на одной странице

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