Registrierung - oder - Hineingehen
Ispitatel 4 ClassicIspitatel 4 Classic

Классический Испытатель часть 4...

1/03/2007

Как пофиксить моргание монстров на движущихся платформах


  • Beschreibung
  • Einstellung

Как пофиксить моргание монстров

Как пофиксить моргание монстров на движущихся платформах


Der Autor der Lektion : Дядя Миша
Der Durchsichten : 571 ( +1 )
Hochgeladen von : Streit
Erstellt : 04/07/2011 6:30:38 PM
Source : http://www.hlfx.ru/forum
Wertung :
 ( 0 ) 
Aktie :


Es gibt die folgenden Sprachen : | russisch |

Наверное все, кто хоть раз пытался поставить монстра на какой-нибудь лифт или поезд сталкивались с пренеприятнейшим явлением - монстр начинал моргать и дергаться. Данный глюк пришел к нам из хл 1.1.0.0 и так и не был пофикшен до настоящего времени. Частично его устранили в спирите - в лифтах монстр ПОЧТИ не дергается, хотя на поездах продолжает моргать как ни в чем не бывало. Я не берусь точно установить причины этого глюка - возможно, что это как-то связано с переносом рендерера в клиент из движка. Итак вот мой путь решения данной проблемы (после фикса монстры абсолютно перестают моргать на любых движущихся поверхностях). Мое решение заключается в том, что когда монстр стоит на месте интерполяция для него отключена. Однако легко сказть - отключить интерполяцию, когда монстр стоит на месте - на самом деле четкого критерия тут нету. Так например есть монстры, у которых pev→velocity всегда равна нулю и не зависит от скорости монстра. К тому же монстры могу еще поворачиваться, ускорение у них везде задается по разному и.т.д. Я подумал, что лучше всего использовать соответствующий флаг в самой анимации - флаг STUDIO_LX. Данный флаг есть в любой анимации движения обычного монстра, однако летающие монстры ее не используют, правда и на платформах они тоже не ездят (предствьте себе например алиен_контроллера на поезде). Однако ближе к делу. У летающих монстров есть флаг FL_FLY который и послужит нам критерием. Кстати незабудьте проставить его у нихиланта - у него данный флаг почему-то отстутствует. Найдте void CNihilanth :: Spawn( void ) и добавьте еще один флаг в pev→flags

Code:

pev->flags |= FL_MONSTER | FL_FLY;

Я не проверял каждого монстра в отдельности, но если вы увидете, что к примеру ихитозавр или там monster_leesh двигаются дерганно - просто поставьте им этот флаг и все пройдет. Теперь собственно сам код. Откройте client.cpp и найдите функцию int AddToFullPack. Замените в ней вот этот код

Code:

if ( !player &&
ent->v.animtime &&
ent->v.velocity[ 0 ] == 0 &&
ent->v.velocity[ 1 ] == 0 &&
ent->v.velocity[ 2 ] == 0 )
{
   state->eflags |= EFLAG_SLERP;
}

на приведенный ниже

Code:

if(ent->v.flags & FL_FLY )
   state->eflags |= EFLAG_SLERP;
else state->eflags &= ~EFLAG_SLERP;

Таким образом мы сообщим клиенту, что данная энтитя летающая и для нее нужно включить интерполяцию Переходим на клиент. Откроем файл StudioModelRenderer.cpp и найдем в нем функцию StudioSetUpTransform. Сначала нам надо получить доступ к флагам модели в анимции. Для этого создадим новую перменную. Прокрутите код до условия if (m_pCurrentEntity→curstate.movetype == MOVETYPE_STEP) и чуть ниже добавьте новую переменную:

Code:

if (m_pCurrentEntity->curstate.movetype ==MOVETYPE_STEP)
{
   float f = 0;
   float d;
   mstudioseqdesc_t *pseqdesc;//acess to studio flags
   pseqdesc = (mstudioseqdesc_t *)((byte *)m_pStudioHeader
+ m_pStudioHeader->seqindex) + m_pCurrentEntity->curstate.
sequence;

Теперь спуститесь ниже, до первого цикла с оригинами и замените его на вот такое условие.

Code:

if (pseqdesc->motiontype & STUDIO_LX || m_pCurrentEntity->curstate.eflags & EFLAG_SLERP)
   for (i = 0; i < 3; i++) modelpos[i] += (m_pCurrentEntity->origin[i] -
     m_pCurrentEntity->latched.prevorigin[i]) * f;

Собственно говоря это и есть отключение интерполяции по оригину. Если монстр не двигается - значит интерполяция отключена.



Die Ähnlichen1. Новые типы патронов - Каждый хоть раз добавлял в Хл новое оружие но ему не нравилось, что оно или слишком мощно стреляет или слишком слабо.
2. Новый монстр - В общем-то это самый лёгкий тутор который можно придумать.
3. Два цвета крови у зомби - Два цвета крови у зомби
4. учёные не отставали - Как сделать так, чтобы учёные не отставали на каждом препятствии
5. Подбираемый фонарик v 2.5 - Подбираемый фонарик v 2.5
6. Удалённый контроль зарядника - Всегда хотелось, чтобы зарядник в хл был управляемым.
7. Переключение оружия a la HL2 - Мне не нравится, как переключается оружие в ХЛ. Может, кому-то и интересно тыкать по менюшкам худа, но мне больше нравится реализация переключения в Unreal RTN, Quake Mission Packs и HL2
8. Увеличение количества мяса от взрыв - Увеличение количества мяса от взрывов людей или инопланетян.
Ссылки на объект
Полная ссылка на текущем языке :
Короткая ссылка :
Ссылка на превью-картинку :
Ссылка на картинку в полном размере :
Ссылка для вашего форума или сайта
BB код ссылка:
BB код ссылка с картинкой :
BB код картинки :
HTML код ссылка:
HTML код ссылка с картинкой :
HTML код картинки :
Sie können nicht kommentieren, da Sie sind nicht registriert.
    AMT .44 Auto-mag
    The SpecialistsAMT .44 Auto-mag
    Desert Eagle Default Two-Toned Reskin
    The SpecialistsDesert Eagle Default Two-Toned Reskin
    FNP-9
    The SpecialistsFNP-9
    Barrett M82A1 Camo (CoD: MW3)
    The SpecialistsBarrett M82A1 Camo (CoD: MW3)