HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Замена punchangle
Страницы (2): [1] 2 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
FaL_DissecTor
Let the killing begin

Дата регистрации: Aug 2008
Проживает: Россия
Сообщений: 178
Возраст: 35

Рейтинг



Замена punchangle

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

Дело такое, при отдаче (читай viewpunch) очень сильно страдает точность, это легкой наблюдается даже в кс, дело в том что реальный путь пули оказывается еще дальше чем предшествующий ему punch (в кс пули не летят в центр экрана даже если достигнут максимальный панч, при том что разброс (который vector_cone) сам по себе небольшой).

Кароче к чему я =) в Battlefield2 в скриптовом языке была команда BackOnRecoil то есть возвращение к исходному значению, так же как и в халве мы лишь делаем "удар" а потом постепенно возвращаем, компенсируем этот удар. Вопрос такой, в каком месте делается это "возвращение", его я почему то не знаю где искать. Возможно ли вместо панча делать простое передвижение центра экрана в какую нибудь точку (добавлением вектора), без каких либо компенсаций.

Возможно дело каким то образом завязано на магических буквах viewpos... кто знает )

Сообщить модератору | IP: Записан
Сообщение: 63461

Старое сообщение 30-08-2010 14:42
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33014
Нанёс повреждений: 392 ед.

Рейтинг



FaL_DissecTor функцию PM_DropPunchAngle в pm_shared.c и функцию V_DropPunchAngle в view.cpp смотрел?

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | IP: Записан
Сообщение: 63462

Старое сообщение 30-08-2010 16:42
-
FaL_DissecTor
Let the killing begin

Дата регистрации: Aug 2008
Проживает: Россия
Сообщений: 178
Возраст: 35

Рейтинг



Смотрел, но как я понял (может неправильно понял), но в хл есть угол обзора (текущий) и текущий же панч, в функции DropPunchAngle он просто меняет панч и со временем сбрасывает его до нуля. Самой передачи панча к обзору я как то не увидел.

извиняюсь что сам не разобрался (обычно сам разбираюсь), просто сейчас на работе пригрузили и голова не варит =).

Сообщить модератору | IP: Записан
Сообщение: 63485

Старое сообщение 01-09-2010 05:40
- За что?
PLut
Creator

Дата регистрации: Jun 2009
Проживает: Санкт-Петербург
Сообщений: 1220
Возраст: 30

Рейтинг



Меняй вьюэнгл на клиенте.

C++ Source Code:
1
vec3_t viewangles;
2
float recoil = 0.20;
3
 
4
gEngfuncs.GetViewAngles( (float *)viewangles );
5
viewangles[PITCH] -= recoil;
6
gEngfuncs.SetViewAngles( (float *)viewangles );


Этот код в эвенты копи-пасть. Recoil - сила разброса, так называемого...
Ну, а вообще тут уже и самому разобраться легко.

Отредактировано PLut 01-09-2010 в 06:55

Сообщить модератору | IP: Записан
Сообщение: 63486

Старое сообщение 01-09-2010 06:49
- За что?
FaL_DissecTor
Let the killing begin

Дата регистрации: Aug 2008
Проживает: Россия
Сообщений: 178
Возраст: 35

Рейтинг



Оу спасибо огромное =) будем работать.

Сообщить модератору | IP: Записан
Сообщение: 63488

Старое сообщение 01-09-2010 07:41
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33014
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
FaL_DissecTor писал:
Самой передачи панча к обзору я как то не увидел.

не передачи, а прибавления. В view.cpp оно.

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | IP: Записан
Сообщение: 63495

Старое сообщение 01-09-2010 13:04
-
FaL_DissecTor
Let the killing begin

Дата регистрации: Aug 2008
Проживает: Россия
Сообщений: 178
Возраст: 35

Рейтинг



Цитата:
Дядя Миша писал:
не передачи, а прибавления. В view.cpp оно.

во view.cpp у нас 2 строчки добавления клиентовского и серверного панчей, т.к. у меня была параноя, там работал только серверный панч.

Если закоментить строку с прибавлением панча (в view.cpp) то экран дергаться не будет, но "физически" то есть на сервере пули будут подниматься как и раньше, поэтому нужно отрубать все панчи на сервере. (или в pm_четотам закоментить функцию droppunchangle)

Хочу отметить, прибавление панча к виду не несет никаких "физических" последствий на стрельбу и т.д., просто экран сдвигается в какую либо сторону, а физически вы стреляете туда где у вас был бы центр экрана если бы сдвига этого небыло. В этом большая проблема и "несостоятельность" того панча.

//-----------------------------------------------------------------
vec3_t viewangles;
float vrecoil = 0.6;// параметр скачка по вертикали
float hrecoil = 0.3;// параметр скачка по горизонтали

gEngfuncs.GetViewAngles( (float *)viewangles ); // берем текущую позицию вида и храним в переменной
viewangles[PITCH] -= vrecoil; // добавляем к переменной высоту скочка
viewangles[YAW] -= gEngfuncs.pfnRandomFloat(hrecoil*-1,hrecoil); // делаем рандомное вычисление от в какую сторону и на сколько будем делать горизонтальный скачок
gEngfuncs.SetViewAngles( (float *)viewangles ); // изменям текущий вид на тот что у нас в переменной.
//-----------------------------------------------------------------

Просто, но довольно симпатично играется.

Посмотрев как сделан панч в COD4MW2, увидил такую картину: там панч довольно сложный и складывается ощущение что он какой-то "составной"- из нескольких способов разных сделан. С одной стороны на некоторых пушках пули летят вверх постепенно как в вышеописанном коде, с другой стороны после отпускания кнопки стрельбы панч очень быстро возвращается на исходную позицию, кажется будто возвращение запускается только после отпускания клавиши стрельбы, в этом плане одиночные выстрелы все идут практически в одну точку, как бы быстро ты не стрелял, а когда зажимаешь вид сильно убегает вверх. Второе необычное это то что на некоторых пушках не такой сильный разброс и ствол просто бросает из стороны в сторону примерно в одном небольшом квадрате, притом складывается ощущение что панч общий состоит из "маленьких" и "больших", возможно это просто рандом от 0 до ЧИСЛА, но от большие подергивания выглядят так буд-то они возвращаются к исходной точке, а маленькие нет.

Как не странно, но вот вопрос отдачи для шутеров более менее реалистичных, это вопрос первой важности, и нужно придумать Систему в которой будет достаточно лишь указать необходимые параметры чтобы получить пушку такой какой нам надо, без лишнего кода.

Сообщить модератору | IP: Записан
Сообщение: 64137

Старое сообщение 17-09-2010 13:28
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33014
Нанёс повреждений: 392 ед.

Рейтинг



FaL_DissecTor ты это к чему написал? Хочешь такую систему придумать? Или хочешь чтобы её за тебя кто-то придумал?

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | IP: Записан
Сообщение: 64140

Старое сообщение 17-09-2010 13:49
-
PLut
Creator

Дата регистрации: Jun 2009
Проживает: Санкт-Петербург
Сообщений: 1220
Возраст: 30

Рейтинг



Цитата:
во view.cpp у нас 2 строчки добавления клиентовского и серверного панчей, т.к. у меня была параноя, там работал только серверный панч.

В view.cpp только КЛИЕНТСКИЙ punchangle. И совершенно такой же punchangle на сервере, который находиться в pm_shared.cpp. В паранойе punchangle в pm_shared.cpp заменили на punchangle из HL2. А под клиент не сделали.

Если руки прямые, то можешь очень просто переделать серверный punchangle из HL2 в клиентский punchangle из HL2, по аналогии со старым punchangle.

А тебя я так и не понял, потому что многобукаф, а смысл не ясен. Что за система?

Сообщить модератору | IP: Записан
Сообщение: 64142

Старое сообщение 17-09-2010 15:02
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33014
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
PLut писал:
Что за система?

Ну Xash Weapon System видимо

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | IP: Записан
Сообщение: 64145

Старое сообщение 17-09-2010 19:47
-
FaL_DissecTor
Let the killing begin

Дата регистрации: Aug 2008
Проживает: Россия
Сообщений: 178
Возраст: 35

Рейтинг



Чтобы было понятно что я хочу, расскажу что я собираюсь делать.

/*оффтоп

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

Вот получается, к кодингу я хоть и не совсем глух, но и не хочу особо им заморачиваться, и в данном случае, код GoldSource игры мне знать не зачем. Конечно код Source SDK я изучать не планирую, буду искать буржуя подкованного в этой сфере, мое дело геймдизайн.

оффтоп закончен ) */

На данный форум я вышел с этой темой, потому что просто для фана кручу верчу параноевский SDK, и заодно пробую, на играбельность некоторые фичи. Дело ведь в том что особо хитрая и интересная панч система если такая будет написана, она пригодится в любом моде (даже в любой игре), поэтому я спросил вас, нет ли у кого нибудь наработок по панчам, нет ли у кого чистого интереса что-то с ваять? То что мне нужно, я сделаю сам, но вдруг кто-то знает что -то интересное и может поделится своими знаниями?

Последние две недели что либо сделать не получалось, потому что работа->деньги->еда =).

Что я не знаю:

1. gEngfuncs.GetViewAngles - вот хорошо бы найти лист большинства функций, можно даже без пояснения, чтобы знать что они есть, и не искать их в стоге сена.

2. Мне не совсем ясна работа кнопок, я понял основные принципы работы кнопок на сервере, но на клиенте фактически ничего такого нет. Мне нужна функция OnRelease любой кнопки (Атаки в нашем случае), именно момента когда её отпускают, а не состояния "не нажата".

3. GetViewAngles/SetViewAngles - вот эти функции они помогут нам работать с видом (view) игрока. Мне немного не понятны, почему разработчики халвы решили разделить панч на 2: "физический" для просчета куда летят пули и добавление смещения к view, но не самом смещение view. Суть в том что меняют эту переменную панч энгла, хотя могли напрямую менять ViewAngles, зачем?

4. Очень мне не ясна работа с векторами в DropPunchAngle, конкретно "смягчение"\"сглаживание" вектора, что бы он не моментально скакал туда - сюда.

//----------------------------------------

Что я имел ввиду под системой:

Во первых для каждой конкретной игры нужна своя система, я не знаком с Xash weapon system, слышал, и кажется мне... =)) что не то это что я имел ввиду.

Должна быть сложная функция или ряд функций, которые могли бы изменять view но с разными параметрами, к примеру:

- возвращать ли сделанный панч?
- На сколько возвращать сделанный панч (коэф.)
- скорость возвращения?
- когда возвращать сделанный панч (сразу, через время, после отжатия кнопки стрельбы).
- частота исполнения этого панча (для разнообразия)
- собственно размеры панча
- Сглаживание панча (или скорость передвижения экрана)

вот смотрите мы сделали такую функцию, и нам нужно сделать автомат у которого в основном идут небольшие невозвратные панчи и иногда проскакивали большие панчи с возвращением. С такой функцией задал параметры и все работает.


p.s. я сам смогу все это сделать, но нужна ваша помощь, по тем пунктам что я не знаю.

Сообщить модератору | IP: Записан
Сообщение: 64417

Старое сообщение 22-09-2010 10:38
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33014
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
FaL_DissecTor писал:
вот хорошо бы найти лист большинства функций, можно даже без пояснения, чтобы знать что они есть, и не искать их в стоге сена.

просто матом хочется орать.
в папку engine\cdll_int.h заглянуть никак?
Цитата:
FaL_DissecTor писал:
Мне нужна функция OnRelease любой кнопки (Атаки в нашем случае)

cl_dll\input.cpp
Функции IN_blablaDown - это нажатие кнопки, а IN_blablaUp - соответственно отпускание.
Там же можешь увидеть, как эти события перехватывает код спектатора.
Цитата:
FaL_DissecTor писал:
Суть в том что меняют эту переменную панч энгла, хотя могли напрямую менять ViewAngles, зачем?

А как ты потом извлечешь пунчангл из вьюанглесов?
Он же "гниёт" со временем. Т.е. угол отклонения с каждой секундой становится всё меньшы и меньшы пока не дойдет до нуля.
Цитата:
FaL_DissecTor писал:
Очень мне не ясна работа с векторами в DropPunchAngle, конкретно "смягчение"\"сглаживание" вектора, что бы он не моментально скакал туда - сюда.

Отсюда и возникает идиотский третий вопрос.

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | IP: Записан
Сообщение: 64426

Старое сообщение 22-09-2010 12:57
-
FaL_DissecTor
Let the killing begin

Дата регистрации: Aug 2008
Проживает: Россия
Сообщений: 178
Возраст: 35

Рейтинг



Цитата:
Дядя Миша писал:
А как ты потом извлечешь пунчангл из вьюанглесов?
Он же "гниёт" со временем. Т.е. угол отклонения с каждой секундой становится всё меньшы и меньшы пока не дойдет до нуля.


Это как раз таки понятно (не совсем понятны конкретно вычисления, математика), и еще дело в другом.

Мы стоим и смотрим в стену (начальное положение), потом стреляем:

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

если выключен клиент панч то вид вообще не сдвинется с места, а пули полетят наверх, выше прицела.

Так вот вопрос, зачем разделять панчи, почему просто не сделать панч только на клиенте а потом брать с клиента текущий viewangles и стрелять строго по нему? Ведь благодаря этому разделению не получается точного совпадения обоих панчей.

Сообщить модератору | IP: Записан
Сообщение: 64432

Старое сообщение 22-09-2010 14:07
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33014
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
FaL_DissecTor писал:
(не совсем понятны конкретно вычисления, математика)

Это очень просто:
Движок рисует сцену не мгновенно. На это тратится некоторое время, которое сохраняется в pparams->frametime. Те несколько милисекунд, которые прошли с момента отрисовки предидущего кадра.
Вот оперируя этим значением мы каждый кадр отнимаем по чють-чють.
C++ Source Code:
len = VectorNormalize ( ev_punchangle );
len -= (10.0 + len * 0.5) * frametime;
len = max( len, 0.0 );

Первая строчка - получаем общую длину нашего вектора (и одновременно нормализуем его до еденичных значений, зачем - поясню чють позже).
Затем мы делим длину вектора на два и прибавляем волшебное число 10.
Почему десять я не знаю, думаю подобрано эмпирическим путём, как наиболее оптимальная скорость возврата пунчанглов. И затем мы умножаем это всё на фрейм тайм, чтобы скорость возврата углов не зависела от текущего FPS. Иными словами, если сцена тяжкая и движок выдает всего 30 FPS, то и пунчанглы будут возвращаться намного медленнее, чего нам не нужно.
В третьей строчке мы проверяем, чтобы наша длина вектора не стала не дай бог меньше нуля, потому что в противном случае, игрока начнет раскачивать как маятник туда-сюда.
Ну и последнее - мы умножаем наш нормализованный вектор на полученную длину (которая уже меньше исходной).
Данный подход позволяет вообще не заморачиваться по какому именно углу у нас ненулевое значение, дабы избежать идиотских проверок
C++ Source Code:
if( ev_punchangle.x > 0 )

и тому подобного. Собственно процесс продолжается до тех пор, пока длина вектора не станет нулевой.
Насчет "пули летят не туда куда смотрит игрок" - дело в том, что положение прицела определяют cl_viewangles, которые отсылаются на сервер. viewangles влияют только лишь на положение экрана.

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | IP: Записан
Сообщение: 64436

Старое сообщение 22-09-2010 16:41
-
FaL_DissecTor
Let the killing begin

Дата регистрации: Aug 2008
Проживает: Россия
Сообщений: 178
Возраст: 35

Рейтинг



Спасибо большое, все понятно, теперь понял смысл умножения на frametime, ведь чем меньше фпс, тем больше frametime, а значит быстрее уменьшается punch, бесхитростно все так =). По cl_viewangles отдельное спасибо ).

p.s. Извиняюсь конечно за нубские вопросы, но действительно человеку не особо знакомому с кодерством, многие очевидные вещи кажутся не такими очевидными ).

Сообщить модератору | IP: Записан
Сообщение: 64453

Старое сообщение 23-09-2010 06:18
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 15:30. Новая тема    Ответить
Страницы (2): [1] 2 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Замена punchangle
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

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