Changes between Initial Version and Version 1 of Ticket #21, comment 2
- Timestamp:
- 01/27/26 16:20:41 (4 weeks ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Ticket #21, comment 2
initial v1 1 1 Прыжки флаеров, это довольно интересный баг на самом деле. Он находится не в коде самих флаеров, а в общем коде движения монстров. Файл monsters.shot(401) 2 2 3 if( m_goalentity->IsPlayer( ))4 {5 if( dz > 40.0f )6 {7 neworg.z -= 8.0f;8 }9 3 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 {{{ 5 if (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 37 28 38 29 Что мы тут видим? Идут неравномерные проверки - больше 40 и меньше 30. Вот он и подпрыгивает. В ванильной Quake II сервер тикал со скоростью 10 кадров в секунду (в ксаше 60 кадров в секунду) и эти прыжки сглаживались интерполяцией, их попросту не было видно. Быстрые попытки с моей стороны исправить эту ситуацию приводили к тому, что монстр улетал куда-то в небо или же напротив тёрся возле пола. Надо проанализировать и найти корректное поведение.
