diff --git a/crates/engine/src/model.rs b/crates/engine/src/model.rs index faa2fef..695277e 100644 --- a/crates/engine/src/model.rs +++ b/crates/engine/src/model.rs @@ -118,6 +118,46 @@ pub fn load_model(vfs: &VirtualFs, name: &str, budget: &mut usize) -> Result Mdl<'a> { } let start = h.localseqindex.max(0) as usize; let mut chosen: Option<(usize, Vec)> = None; - for stride in [184usize, 188, 192, 196, 200, 204, 208] { + // Перебор широкий: у «единичных» (unified) моделей GMod запись + // секвенции длиннее, чем у моделей карты, и угадывать нельзя — берём + // только тот шаг, при котором читаются имена ВСЕХ секвенций. + for stride in (176..=320).step_by(4) { let mut out = Vec::with_capacity(count); let mut ok = true; for i in 0..count { diff --git a/docs/PARITY.md b/docs/PARITY.md index 55248af..436fa8a 100644 --- a/docs/PARITY.md +++ b/docs/PARITY.md @@ -3192,9 +3192,19 @@ Sandbox. GPU» работает целиком. Пока это не анимация: настоящие кадры из `.ani` следующим шагом. -**Порядок работ:** (а) секвенции сделаны; дальше `.ani` (кадры) и слияние -включённых моделей; (б) привязка вершин сделана; (в) CPU-скиннинг сделан; -(г) проигрывание одной секвенции с циклом; (д) выбор по состоянию и блендинг. +**Сделано (слияние включённых моделей).** Разбор `include_models()` и лёгкая +загрузка включённой модели (без геометрии и текстур: `Mdl::parse` + секвенции). +Замеры: `police.mdl` включает `models/m_anm.mdl` — библиотеку анимаций GMod; +у неё `numlocalseq=464`, `numlocalanim=1563`, 56 костей. После слияния у модели +игрока **465 секвенций** (была одна «ragdoll»). + +Важная находка: у «единичных» (unified) моделей GMod запись секвенции длиннее +176…208 байт, поэтому перебор шага расширен до 176…320 с обязательной проверкой +имён ВСЕХ секвенций — иначе разбор молча возвращал ноль. + +**Порядок работ:** (а) секвенции и включённые модели сделаны; дальше `.ani` +(кадры); (б) привязка вершин сделана; (в) CPU-скиннинг сделан; (г) проигрывание +одной секвенции с циклом; (д) выбор по состоянию и блендинг. **Приёмка:** модель игрока/оружия двигается в кадре, ходьба переходит в бег и присед по скорости, прыжок показывается отдельной секвенцией.