-
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