• Nikitos's avatar
    Порт боевой модели из audm-neko: $.combat — здоровье по зонам
    · 383dd41e
    Nikitos создал
    Пятый блок порта (docs/TASKS.md §12.10, §6.5). В audm-neko здоровье стало
    пятью зонами вместо одного числа (limb_health.gd + damage_model.gd), и главное
    решение модели — чёрную конечность поднимает ОБЫЧНАЯ аптечка, а не только
    хирургия: иначе игрок без хирургии встаёт в тупик.
    
    * зоны head 35 / chest 85 / arms 60 / stomach 70 / legs 65; ноль в голове или
      груди — смерть, ноль в конечности — «чёрная» с дебаффами (прицел ×1.6,
      перезарядка ×1.4, скорость ×0.45, прыжок ×0.5); парные конечности — один пул;
    * урон выстрела: (оружие + добавка за часть тела) × 1.35; добавки 30/10/6/6;
      слот рига переводится в зону (arm_forearm_front → arms), неизвестный слот —
      грудь: лучше попасть, чем промахнуться в пустоту;
    * кровь: попадание от 25 урона в руку, живот или ногу заводит кровотечение
      (1 HP/с); доли времени копятся шагами по 0.1 с, поэтому 60 кадров дают ровно
      1 HP; голова и грудь не кровят;
    * броня: класс 1..6 держит 15%…70%, защита падает вместе с прочностью;
      applyArmor возвращает { damage, blocked, spent };
    * $.combat.attach(узел) связывает модель с узлом: cur_hp/max_hp = сумма по
      нелетальным зонам, события combat:zone/blacked/bleed/died уходят в $.signal;
    * save/load, report() для отладки, heal() поднимает и чёрное.
    
    Тест нашёл настоящий баг: таблица добавок за часть тела была ключами СЛОТОВ
    (arm, torso), а damageFor получает ИМЕНА ЗОН (arms, legs) — попадание в руку
    считалось как в грудь (+10 вместо +6). Теперь принимаются оба написания.
    
    Проверка: tests/js/combat_test.mjs (18 проверок: зоны, смерть, кровь, дебаффы,
    лечение чёрного, броня, урон), полный набор qjs и агентских тестов зелёный.
    383dd41e