-
Nikitos создал
Третий блок порта (docs/TASKS.md §12.9, §6.3). В audm-neko ни один звук не был одним файлом: у шага шесть вариаций, у удара несколько, и один файл подряд слышится как одинаковые щелчки. Переносим три подсистемы. * $.sound.defineBank/playBank — банк вариаций: выбирает файл, не повторяя последние (avoids), разбрасывает высоту (±pitch) и громкость (диапазон), соблюдает interval. Банк не грузит звук сам, а зовёт $.sound.play, поэтому приглушение, панорама и каналы остаются общими; * $.steps — шаги по пройденному ПУТИ, а не по таймеру (иначе на быстром шаге слышна дробь): 78 пикселей на шаг у ходьбы, 96 у бега, медленнее 40 px/с — переминание. Бег громче, присед почти беззвучен, приземление звучит по скорости падения. Материал пола задаёт игра, есть псевдонимы и запасной; * $.barks — реплики NPC по ситуации, психотипу и уровню безумия: недавние не повторяются, «свои» для психотипа выбираются в 70% случаев, madness_min/max отсекают бред у вменяемых. Чистые функции (выбор файла, разброс, накопление пути, выбор реплики) проверяются без движка; тест нашёл настоящую ошибку: pickBankFile падал на null вместо возврата null. Проверка: tests/js/steps_test.mjs (14 проверок), полный набор qjs и агентских тестов зелёный.
c1ce6a6b