# Экипировка: совместимость и готовность

`equipment.json` содержит все 30 позиций из проверенной LIVE-игры: 10 касок, 7 костюмов, 6 штанов, 7 вариантов рюкзака. Цены и условия открытия сохранены. ID `marmot` означает текущую расцветку «США». Эти ID нельзя переименовывать при редизайне.

## Данные игры и рисунок

Сохранение использует `equip = {h, s, p, b}`. Пример: `{h:'red', s:'hardwear', p:'black', b:'none'}`. Имена `helmet/suit/pants/pack` — только названия групп каталога. Надетый предмет определяется парой `kind:id`, например `h:red`; цвет и перевод названия не являются ID.

Примерка создаёт отдельный объект выбора и не изменяет wallet/owned/equip. Новая графика существующего предмета сохраняет его цену и unlock. Новый продаваемый предмет требует отдельно определить цену и доступность; скрипт создания черновика этого не делает.

Правила отрисовки из LIVE:

```js
effectiveTier = selectedSuit.form ?? naturalTier;
pantsVisible = effectiveTier < 3;
oxygenVisible = naturalTier === 3 || oxygenBoostActive;
visualPack = oxygenVisible ? 'pack-oxygen'
  : equip.b === 'none' ? null : `pack-${equip.b}`;
```

Только `s:pink`, `s:spider`, `s:ev` принудительно используют form 3. `s:hc` следует естественному утеплению горы; `suit-full-hc.png` относится к его высотному варианту, не ко всем горам. Высотный pink на низкой горе сам по себе не включает кислород. Кислород заменяет рюкзак только визуально, исходный `equip.b` сохраняется.

Ноги → рюкзак/баллон → туловище и руки → каска → маска/шланг → предмет в руке — целевой порядок слоёв. Для цельного костюма отдельные штаны скрываются. Стороны, точки привязки, закрывающие части и позы должны совпадать с телом.

## Что готово сейчас

| Материал | Готовность |
|---|---|
| Все 30 позиций, отдельные PNG, пустой pack-none | Для каталога и примерки |
| hero-smooth, 16 кадров, отдельные рюкзак и шарф | Базовый мягкий прыжок |
| Каски и рюкзаки | Следуют точкам тела в reference preview; не проверены во всех production сочетаниях |
| Куртки, штаны, четыре full-suit PNG | Статичная примерка; покадровые слои не предоставлены |
| Четыре утеплённых силуэта | 8 кадров с уже нарисованной одеждой и рюкзаком; не модульное тело |

Крупный манекен — пример композиции. Он не подтверждает посадку при всех движениях. В режиме прыжка гардеробная сообщает, какие слои ещё не анимированы. Проверка `system.py validate` не переводит существующие материалы в production-ready.

## Как довести одежду до полного движения

Claude должен сначала подготовить чистое тело/базовую маску для четырёх форм без встроенных рюкзака и заменяемой одежды. Наложение новой куртки поверх оранжевой с уже нарисованными руками создаёт вторые руки и неверные контуры.

Основной переносимый формат — отдельный прозрачный PNG-атлас слоя 512×512, 4×4 кадра по 128×128. Порядок кадров совпадает с hero-smooth, ноги привязаны к (64,120), рабочая область кадра — (8,8,112,112). Все 16 кадров заполнены нужной частью тела, включая сжатие, верх дуги и касание. Масштаб не пересчитывается по bounding box каждого кадра.

Для каски и рюкзака допустим один спрайт с отдельными матрицами положения/поворота на 16 фаз, если все перекрытия реально проверены. Это альтернативный будущий renderer; текущий генератор заготовок использует атласы, потому что их можно переносить между движками без зависимости от рига.

Покрытие форм: каски/рюкзаки — 0–3; штаны — 0–2; classic/marmot/hardwear/hc костюмы — 0–3; pink/spider/ev — только 3. Общий атлас можно указать для нескольких форм только после проверки на каждой. Обязательно проверить края головы, шеи, талии и обуви; недопустимы вторая каска/рюкзак, просвечивающая старая одежда, разрывы швов и дрожание между кадрами.

Для каждого обновления сохраняются: иконка, атласы, соответствие tier, reference body, точки привязки, 4 ключевых позы, обе стороны, дневной/ночной контактный лист и 10 секунд движения. Затем проверяется реальная игра: прыжок, верёвка, кислород, ледоруб, урон, пауза/продолжение. Эти интеграционные проверки выполняются в проекте Claude, где находится игра.
