• Nikitos's avatar
    Порт звука из audm-neko: банки вариаций, шаги, реплики NPC
    · c1ce6a6b
    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