![]() |
Показать все 21 сообщений этой темы на одной странице |
HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Замена punchangle (https://hlfx.ru/forum/showthread.php?threadid=2297)
Замена punchangle
Добрый день,
сейчас занимаюсь кое каким баловством, пробую на основе паранои сделать интересный шутер по монстрам, собственно там уже все есть и система готова (классы оружия и загрузка параметров)и т.д. но хочется приятных мелочей.
Дело такое, при отдаче (читай viewpunch) очень сильно страдает точность, это легкой наблюдается даже в кс, дело в том что реальный путь пули оказывается еще дальше чем предшествующий ему punch (в кс пули не летят в центр экрана даже если достигнут максимальный панч, при том что разброс (который vector_cone) сам по себе небольшой).
Кароче к чему я =) в Battlefield2 в скриптовом языке была команда BackOnRecoil то есть возвращение к исходному значению, так же как и в халве мы лишь делаем "удар" а потом постепенно возвращаем, компенсируем этот удар. Вопрос такой, в каком месте делается это "возвращение", его я почему то не знаю где искать. Возможно ли вместо панча делать простое передвижение центра экрана в какую нибудь точку (добавлением вектора), без каких либо компенсаций.
Возможно дело каким то образом завязано на магических буквах viewpos... кто знает )
FaL_DissecTor функцию PM_DropPunchAngle в pm_shared.c и функцию V_DropPunchAngle в view.cpp смотрел?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Смотрел, но как я понял (может неправильно понял), но в хл есть угол обзора (текущий) и текущий же панч, в функции DropPunchAngle он просто меняет панч и со временем сбрасывает его до нуля. Самой передачи панча к обзору я как то не увидел.
извиняюсь что сам не разобрался (обычно сам разбираюсь), просто сейчас на работе пригрузили и голова не варит =).
Меняй вьюэнгл на клиенте.
1 | vec3_t viewangles; |
2 | float recoil = 0.20; |
3 |
4 | gEngfuncs.GetViewAngles( (float *)viewangles ); |
5 | viewangles[PITCH] -= recoil; |
6 | gEngfuncs.SetViewAngles( (float *)viewangles ); |
Оу спасибо огромное =) будем работать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
FaL_DissecTor ты это к чему написал? Хочешь такую систему придумать? Или хочешь чтобы её за тебя кто-то придумал?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Чтобы было понятно что я хочу, расскажу что я собираюсь делать.
/*оффтоп
В планах у меня создание мода, который для игроков так же как и для 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. я сам смогу все это сделать, но нужна ваша помощь, по тем пунктам что я не знаю.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
len = VectorNormalize ( ev_punchangle ); |
len -= (10.0 + len * 0.5) * frametime; |
len = max( len, 0.0 ); |
if( ev_punchangle.x > 0 ) |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Спасибо большое, все понятно, теперь понял смысл умножения на frametime, ведь чем меньше фпс, тем больше frametime, а значит быстрее уменьшается punch, бесхитростно все так =). По cl_viewangles отдельное спасибо ).
p.s. Извиняюсь конечно за нубские вопросы, но действительно человеку не особо знакомому с кодерством, многие очевидные вещи кажутся не такими очевидными ).
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Я попробовал написать свой punchangle, основанный на setview, долго мутил разные штуки ), оказывается что во многих случаях все делается гораздо проще. И все же панч даже с setview очень глючен.
Еще конечно была куча недодуманных фич которые в принципе поставили крест на этой затее, например когда кончаются патроны в магазине а кнопка еще нажата, то возвращение панча не происходит, это впринципе решаемо, но общая глючность панча со всеми его несовпадениями и излишними подергиваниями, мне немного не вкатили. И даже если подумать для того метода с setview, игроку проще компенсировать отдачу руками во время стрельбы (это полюбому пришлось бы в обоих случаях, но с возвратом, прицел бы уходил еще ниже и пришлось бы его поднимать каждый раз)
Имхо лучший вариант для шутера это тот что предложил Plut.
Таакс, извиняюсь что поднял старую тему, но я наконец таки понял как работает разброс в Counter-Strike, отчасти потому что посмотрел исходники =) которые теперь найти не могу, потому что сайт где они лежали более не доступен.
Собствено работает он так.
Делем всю систему на 2 части:
1. Разброс (SPREAD)
2. Отдача (PUNCH)
1. Разброс всегда постоянен, он задан константами в коде каждой пушки. Меняется он лишь при условиях
Стоя на месте
Скорость > 70% от 320
Скорость > 0
Приседание
Игрок в воздухе.
Для каждого из этих случаев задан свой вектор разброса, больше они нигде и никогда не меняются. А между этими условиями разброс меняется мнгновенно, потому что задача вектора разброса стоит перед вызовом firebullets.
2. А вот отдача это то самое что делает нашь разброс таким разным в разных случаях.
Отдача растет по какой-то неизвестной мне схеме(линейной?), условно от 0% до 100%, то есть от минимальной до максимальной.
Так же как и в выше описанных случаях для каждого состояния игрока стоят свои параметры по отдаче. Смысл в том что чем "хуже" положение игрока тем быстрее отдача приближается к 100% значению.
То есть если мы будем стоять на месте и стрелять, то патрону к 10-15 мы достигним максимальной отдачи, а если мы прыгнем и выстрелим 2 раза, то мы сразу перейдем к максимальной отдаче, которая будет медленно угасать.
По этому чтобы стрелять точно, нужно стрелять только в положении стоя и короткими очередями, тогда точность практически не падает. (все игроки хорошо играющие в кс это знают). На скорость угасания отдачи положение игрока в пространстве не влияет.
Отдача - основопологающий фактор в кривости пушек.
Собственно буду пробывать делать такую систему панч+разброс, она очень выгодно смотриться на двигле goldsource.
Правда все еще остается вопрос каким образом вальвовцы пофиксили расхождение между трейсами физики (пуль) и трейсами декалей.
__________________
Такие дела...
>>расхождение между трейсами физики (пуль) и трейсами декалей.
А разве есть расхождение Координаты точек вылета и попадания отсылаются на клиент в эвенте, там делается ev_hldm_firebullets, и по переданным координатам рисуются трейсеры и декали. Единственное, расхождение может быть, когда трейсер сделан на клиенте, а декаль на сервере и наоборот, и то только в том случае, если раньше был один вектор разброса, теперь мы его сменили на другой и забыли скомпилить клиент заново.
Ku2zoff
Не знаю в чем причина, но когда делал через обычный панч, пули улетали выше чем рисовались декали. Попробую сейчас тщательно это сделать с нуля, мож действительно где-то косяк был.
__________________
Такие дела...
Хотя верно, что-то я не подумал. Вектор разброса же будет динамический, а на клиенте фиксированный сохраняется. Если предиктинг и клиентские оружия убрать, проблема отпадёт.
Временная зона GMT. Текущее время 21:06. | Показать все 21 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024