Gunner Tracker

Changes between Initial Version and Version 1 of Ticket #21, comment 2


Ignore:
Timestamp:
01/27/26 16:20:41 (4 weeks ago)
Author:
deex

Legend:

Unmodified
Added
Removed
Modified
  • Ticket #21, comment 2

    initial v1  
    11Прыжки флаеров, это довольно интересный баг на самом деле. Он находится не в коде самих флаеров, а в общем коде движения монстров. Файл monsters.shot(401)
    22
    3                                 if( m_goalentity->IsPlayer( ))
    4                                 {
    5                                         if( dz > 40.0f )
    6                                         {
    7                                                 neworg.z -= 8.0f;
    8                                         }
    93
    10                                         if( !( FBitSet( m_flags, FL_SWIM ) && ( m_waterlevel < 2 )))
    11                                         {
    12                                                 if( dz < 30.0f )
    13                                                 {
    14                                                         neworg[2] += 8.0f;
    15                                                 }
    16                                         }
    17                                 }
    18                                 else
    19                                 {
    20                                         if( dz > 8 )
    21                                         {
    22                                                 neworg.z -= 8.0f;
    23                                         }
    24                                         else if( dz > 0.0f )
    25                                         {
    26                                                 neworg.z -= dz;
    27                                         }
    28                                         else if( dz < -8.0f )
    29                                         {
    30                                                 neworg.z += 8.0f;
    31                                         }
    32                                         else
    33                                         {
    34                                                 neworg.z += dz;
    35                                         }
    36                                 }
     4{{{
     5if (m_goalentity->IsPlayer()) {
     6  if (dz > 40.0f) {
     7    neworg.z -= 8.0f;
     8  }
     9
     10  if (!(FBitSet(m_flags, FL_SWIM) && (m_waterlevel < 2))) {
     11    if (dz < 30.0f) {
     12      neworg[2] += 8.0f;
     13    }
     14  }
     15} else {
     16  if (dz > 8) {
     17    neworg.z -= 8.0f;
     18  } else if (dz > 0.0f) {
     19    neworg.z -= dz;
     20  } else if (dz < -8.0f) {
     21    neworg.z += 8.0f;
     22  } else {
     23    neworg.z += dz;
     24  }
     25}
     26}}}
     27
    3728
    3829Что мы тут видим? Идут неравномерные проверки - больше 40 и меньше 30. Вот он и подпрыгивает. В ванильной Quake II сервер тикал со скоростью 10 кадров в секунду (в ксаше 60 кадров в секунду) и эти прыжки сглаживались интерполяцией, их попросту не было видно. Быстрые попытки с моей стороны исправить эту ситуацию приводили к тому, что монстр улетал куда-то в небо или же напротив тёрся возле пола. Надо проанализировать и найти корректное поведение.