Ku2zoff писал: Попробую func_illusionary, будет влиять на появление бага несолидный объект или нет.
В общем, выяснил причину теперь точно. Энтитя верёвки не должна находиться в солидном объекте (браше) или рядом с ним. Видимо, минимально безопасное расстояние зависит от размеров сегмента:
C++ Source Code:
Vector(-16, -16, -18), Vector(16, 16, 18)
Чем глубже верёвка в браше, тем больше сегментов колбасит, т.к. они, имея SOLID_TRIGGER, "цепляются" за браш. Так что либо крюк моделькой, как посоветовал ДМ, либо func_illusionary или func_detail с passable = 1 вместо брашевого потолка.
Можно сделать первые два-три сегмента несолидными, всё равно на них игрок не может залезть. Я кажется понял, отчего возникла эта проблема именно в модифицированном коде. В оригинале, ЕМНИП, есть семплы и сегменты, кол-во энтить двойное. А тут только сегменты. Подозреваю, что семплы используются именно для того, чтобы лазить, а сегменты для визуального отображения. И в оригинале видимые сегменты не коллайдят с миром. А то, что коллайдит - так же колбасится, просто этого не видно.
Ну в любом случае мне не приходило в голову утопить веровку в потолке.
А двойное кол-во энтить расходуется впустую по сути. Я это дело оптимизировал. Плюс в оригинале ще была какая-то странная штука, может я недопонял, но там видимые и коллидабельные эдикты каждый кадр менялись зачем-то местами.
Товарисчи, кто нибудь пробовал добавить в мод скольжение по наклонным поверхностям как в q1/q3? Я начал разбираться в этой теме, ещё не понял в чем ключевое отличие. В HLSDK это передвижение работает так - если угол между осью Z и нормалью поверхности меньше 45.5 градусов, то передвижение происходит так же, как и по обычному полу. Но если этот угол больше, то передвижение происходит по алгоритму будто игрок летит в воздухе. Ключевая задача такая: сделать возможность взбираться на наклонные плоскости, и скользить по ним вниз, при этом набирая скорость.
Дядя Миша писал: в любом случае мне не приходило в голову утопить веровку в потолке
Даже если ориджин env_rope находится ниже потолка, второй сегмент всё равно залипает. Я как раз и напоролся на это в опфоре, см. скрин декомпила карты. Даже если env_rope спустить ещё ниже, чтобы энтить не касалась потолка, второй сегмент всё равно будет залипать, видимо из-за размеров. На скрине из игры две верёвки. Которая справа - у той расстояние от края энтити (в редакторе) до потолка - 16 юнитов. Её не колбасит, как раз видимо безопасное расстояние.
Ku2zoff писал: только там второй сегмент торчит горизонтально.
Я так и не наблюдаю этот баг, по крайней мере, визуально. Скинешь карту и скриншот?
UPD: загрузил ofboot3 - действительно колбасит сегмент. Если делал фикс - делись
Цитата:
Ku2zoff писал: А ещё эти верёвки позволяют игроку почти что летать
Тоже непонятно, что ты подразумеваешь. Веревка в опфоре позволяет игроку находится на уровне горизонтали, проведенной, через её ориджин (возможно даже чуть выше), т.е. раскачиваться как минимум на 180 градусов. В реализации на гитхабе также. Быстро "летать" туда-сюда на достаточно длинной веревке в опфоре тоже получается.
Цитата:
Ku2zoff писал: В оригинале, ЕМНИП, есть семплы и сегменты, кол-во энтить двойное. А тут только сегменты.
Я убирал сэмплы, чтобы уменьшить количество эдиктов. Ты можешь проследить по истории репозитория.
UPD: я напутал. Сэмплы остались, но в целом количество энтить я уменьшал, просто теперь сэмпл хранит по два набора данных. Я пробовал совсем избавляться от сэмплов, как в xashxt, но из-за этого менялась физика веревок, так что я в итоге их оставил.
Вообще в целом, если что-то правишь - можешь делать пуллреквесты, и обсуждать мы будем уже на гитхабе.
Да. И получилось, что раскачиваться веревки стали не так охотно, как в опфоре. У меня кстати это в отдельном бранче ещё осталось. Залил поверх ветки opfor сюда https://github.com/FreeSlave/hlsdk-...opfor_alt_ropes
Дядя Миша писал: Это в ксаш-моде или после копипасты? Может дело в SQB?
Вот видос из ксашмода. Ситуация 1 в 1 как и после копипасты.
Цитата:
FreeSlave писал: Тоже непонятно, что ты подразумеваешь.
Ксашевский вариант аналогичен по физике опфоровскому. То, что в репе FWGS, работает немного не так: игрок очень уж сильно разгоняется при раскачивании, и может взлететь выше ориджина env_rope. Хотя, наверное мне это могло показаться.
Цитата:
FreeSlave писал: Вообще в целом, если что-то правишь - можешь делать пуллреквесты, и обсуждать мы будем уже на гитхабе.
Если бы я нашёл причину, то исправил бы. Пока мне непонятно, почему сегменты колбасит.
Кстати, проблемную верёвку легко вычислить визуально: первый сегмент у неё значительно темнее остальных.
Добавлено 23-03-2020 в 00:14:
Цитата:
FreeSlave писал: И получилось, что раскачиваться веревки стали не так охотно, как в опфоре.
Ну вот то-то и оно. Значит мне не показалось, что у вас верёвки сильнее качаются. Однако, ксашевский вариант не мешает пройти бут_кэмп, хоть и раскачиваться становится тяжелее. Как там в сингле, может быть есть места, где ускорения не хватит, я не знаю, не проверял.
Так. Нашёл в каком месте кода у нас проблема. Но пока не нашёл, в чём она заключается. Функция CRope::TraceModels, блок кода в условии if (m_bObjectAttached). Если этот блок выкинуть, чтобы трейс был и в случае с приаттаченным объектом, и без него одинаковый - проблемы нет. Может быть, дело в конечной точке трейса, ведь она вычисляется в первом случае динамически, в зависимости от flTraceDist.