Skip to main content
Игры

Как услышать войс в демке FACEIT (CS2)

FACEIT пишет голос обеих команд, но только в одной из двух демок матча. Какой файл открыть, три команды от FACEIT и битовая маска слотов.

Автор: 7 min read
Обложка статьи. Иконка динамика с тремя дугами, внутренняя выделена янтарным, и подпись: голос лежит в файле .dem.zst

После матча на FACEIT у вас остаются две демки: демка Valve в истории матчей в игре, в которой тишина, и собственный .dem.zst от FACEIT из комнаты матча, где записан голос обеих команд. Возьмёте не тот файл, и никакая консольная команда не поможет: включать там нечего.

Разберётесь с файлом, и дальше останутся две команды и одно число.

Нужны только команды? Загрузите .dem.zst в калькулятор войса для демок CS2, отметьте игроков, которых хотите слышать, и скопируйте готовые команды tv_listen_voice_indices. Остальная часть страницы объясняет, почему они работают.

В какой из двух демок есть голос

В демках матчмейкинга Valve и Premier нет голосовых данных. Не заглушены, не зашифрованы - их просто нет. Инструмент, который вытаскивает голосовые дорожки из демок Counter-Strike, держит это предупреждение в самом верху README: из ММ-демки извлекать нечего.1 Никакая консольная команда не воспроизведёт звук, который не попал в файл.

Вторую половину большинство гайдов пропускает. На сервере с SourceTV голос тоже не пишется сам по себе. В CS2 SourceTV не записывает голос игроков, пока сервер это не включит, а исторически это значило sv_alltalk 1 или плагин, который делает это за вас.2 FACEIT войс записывает и объясняет игрокам, как его включить.5 Сервер для пикапов, который кто-то арендовал на прошлой неделе, вполне может этого не делать.

Источник демкиЕсть голос?
FACEITДа
ESEA и другие лигиДа
Комьюнити-сервер с SourceTVТолько если сервер это включил
Матчмейкинг ValveНет
Premier ValveНет

Так что если демка молчит, вопрос "что я ввёл не так" имеет смысл только после того, как вы убедились, что голос в этой демке вообще мог быть.

Экран окончания матча Premier в Counter-Strike 2: рейтинг 30 114 после победы на 115 очков, ниже стоят пять игроков победившей команды.
Так заканчивается матч Premier, и демка, которую он пишет, вообще не содержит голосовой дорожки. Сначала исключите режим, потом ищите опечатку. Скриншот: Valve.

Что делает tv_listen_voice_indices?

Эта команда решает, чей голос вы слышите при просмотре демки через SourceTV. По умолчанию она равна 0, а 0 значит никого.2

Значение - это битовое поле слотов игроков:

  • -1 - слышно всех, потому что в -1 установлены все биты
  • 0 - не слышно никого, это значение по умолчанию и сброс
  • любое другое число - слышно конкретный набор слотов, чьи биты установлены

Команда с _h - не копия, а вторая половина

Это самое непонятое место, и большинство гайдов повторяют одну и ту же ошибку.

tv_listen_voice_indices и tv_listen_voice_indices_h - две половины одного 64-битного битового поля. Первая хранит младшие 32 бита и отвечает за слоты игроков с 0 по 31. Команда с _h хранит старшие 32 бита и отвечает за слоты с 32 по 63.2 CS Demo Manager генерирует их именно так: один цикл, один бит на id игрока, младшее значение для id меньше 32 и старшее для id от 32 и выше.3

Это меняет совет, который вы встретите везде:

  • Чтобы слышать всех, ставьте обе на -1. Именно этот рецепт публикует FACEIT,5 и он работает, потому что -1 заполняет все биты обеих половин.
  • Чтобы слышать конкретных игроков, пишите маску в tv_listen_voice_indices, а _h ставьте на 0. В 5v5 никто не сидит в слоте 32 и выше, так что _h не к кому обращаться. Копировать туда то же число бесполезно, а на большом сервере с SourceTV это включило бы зеркальный набор старших слотов, которые вы не выбирали.

Заодно _h со значением 0 сбрасывает то, что там осталось с начала сессии, и уже ради этого стоит его ставить.

Если вам нужны коллы одного человека, а не всей стороны, в статье как услышать войс одного игрока в демке CS2 разобрано, как выбрать слоты вручную.

Как работает битовая маска слотов

Каждый бит соответствует одному слоту. Слот 1 - это бит 0, слот 2 - бит 1, слот 3 - бит 2 и так далее: каждый слот стоит вдвое больше предыдущего. Сложите значения нужных слотов:

СлотЗначение бита
11
22
34
48
516

Слоты 1, 3 и 4 дают 1 + 4 + 8 = 13:

tv_listen_voice_indices 13
tv_listen_voice_indices_h 0

Калькулятор войса сложит за вас. Если удобнее считать от двоичной записи, наш конвертер систем счисления переведёт её в десятичное число, которое ждёт CS2.

Как узнать, кто в каком слоте

Порядок слотов берётся из порядка сущностей игроков, записанного в демке. Это не порядок в таблице счёта, и нет причин, чтобы он совпадал с вашими ожиданиями. Зато он фиксирован для этой демки: один и тот же файл каждый раз воспроизводится с теми же слотами. А вот маска не переносится: число, которое выделяло вашего IGL во вторничном матче, в четверговом укажет на незнакомца.

Вручную слоты перебирают так:

spec_player 1
spec_player 2
spec_player 3

и смотрят, кто появляется. Быстрее загрузить демку в калькулятор: он читает таблицу слотов из файла и подписывает каждый слот ником и командой игрока, так что перебор не нужен.

Как услышать одну команду

Когда знаете, какие слоты у какой стороны, сложите значения этой стороны. В калькуляторе есть кнопки Все / Все T / Все CT, которые собирают число для целой стороны в один клик. Это то, что нужно для кастов или нарезки хайлайтов, где десять перебивающих друг друга голосов заглушают раунд.

Одна оговорка, если вместо этого вы пользуетесь алиасами voice_ct и voice_t из CS Demo Manager: они относятся к стартовой стороне каждого игрока, а не к текущей.4 После смены сторон они уже не значат то, что написано в названии. Там же есть voice_STEAMID64 для одного игрока.4

Если вам нужна другая сторона, в статье как услышать вражескую команду объясняется, где всё усложняется: есть ли их голос в файле вообще, решил сервер ещё во время матча.

Текстовый чат в придачу

Голос - это половина записи. Чтобы подтянуть текстовый чат из игры:

tv_relaytextchat 2

2 показывает всё, включая общий чат, а 0 скрывает чат полностью. FACEIT включает эту команду в тройку, которую даёт для разбора демок.5 Она выручает, когда колл слышно, но непонятно, чей это голос.

Они сбрасываются при каждом закрытии игры

Обе переменные возвращаются к 0, когда CS2 закрывается. Это и есть ловушка "вчера же работало": ничего не сломалось, просто сессия снова началась с тишины по умолчанию. Держите команды там, откуда их можно вставить, а не пересчитывайте число каждый раз.

Всё вместе

  1. Убедитесь, что в демке может быть голос: FACEIT или лига, а не ММ и не Premier.
  2. Выясните, кто из игроков в каком слоте, или пусть их прочитает калькулятор.
  3. Сложите значения битов нужных игроков.
  4. Поставьте tv_listen_voice_indices на это число, а tv_listen_voice_indices_h на 0. Для всех ставьте обе на -1.
  5. Добавьте tv_relaytextchat 2, если нужен чат, и запускайте демку.

Пропустите арифметику и перебор через spec_player с помощью калькулятора войса для демок CS2: загрузите демку, отметьте игроков, скопируйте команды.

Шаги 1 и 2 на FACEIT можно вообще больше не делать. DemoVoice добавляет кнопку в комнату матча, поэтому выбрать он может только нужный .dem.zst, распаковывает его прямо при скачивании и читает таблицу слотов из файла на вашем компьютере. Если сравниваете его с CS Demo Manager или другими калькуляторами, в статье все способы услышать войс в демке FACEIT расписано, что делает каждый из них и что остаётся на вас.

Когда голос слышно, вторая половина разбора демки - добраться до нужного момента. В статье как перевести тик во время разобраны demo_gototick, порядок аргументов, на котором спотыкаются, и почему тикрейт надо брать из демки, а не по привычке.

Источники

Каждое число в этой статье подтверждено источником ниже. Утверждения, которые не удалось подтвердить, убраны, а не смягчены.

  1. Рецензируемый источникAkiVer

    That Valve matchmaking demos contain no voice audio data, stated as a standing warning by the author of the tool that extracts voice from CS:GO and CS2 demos.

  2. Рецензируемый источникb0ink

    The verbatim convar descriptions, that tv_listen_voice_indices is a bitfield of player slots 0 to 31 and tv_listen_voice_indices_h the high 32 bits covering slots 32 to 63, both defaulting to none, and that CS2 SourceTV does not record player voice unless the server enables it.

  3. ПервоисточникCS Demo Manager

    That the value is one bitmap split into two 32-bit halves, low for ids 0 to 31 and high for ids 32 to 63, as implemented by the demo tool that generates these commands.

  4. ПервоисточникCS Demo Manager

    The voice_ct, voice_t and voice_STEAMID64 aliases, and that the team aliases refer to the starting side rather than the current one.

  5. ПервоисточникFACEIT

    The exact three-command recipe FACEIT tells players to paste when reviewing a FACEIT demo, and that FACEIT demos do carry voice comms.

Темы

Инструменты из статьи

Новые инструменты на почту

Новые инструменты и иногда подробный разбор, примерно раз в месяц. Без спама, адрес никому не передаем, отписка в один клик.

Похожие статьи

Article title card. Two columns of five dots either side of a dashed dividing line, the left column amber and the right grey, with the line: the server decides who was recorded
Gaming Tools

How to Hear the Enemy Team's Voice in a CS2 Demo

Whether you can hear the enemy in a CS2 demo depends on what the server recorded, not on your console. Which demos carry it, and the mask for one side.

Article title card. A loudspeaker icon struck through by a thick amber line, with the line: the demo has no voice in it
Gaming Tools

Why You Can't Hear Voice in Your CS2 Demo (Fixes)

Can't hear voice comms in a CS2 or FACEIT demo? The real causes - no voice in MM/Premier demos, unset tv_listen_voice_indices, reset commands - and fixes.

A player seen from behind in a dark room, wearing an over-ear headset lit red and blue, facing a blurred monitor.
Gaming Tools

Every Way to Hear FACEIT Demo Voice Comms, Compared

Console commands, a web calculator, CS Demo Manager, a voice extractor and extensions: what each does for FACEIT demo voice and what it leaves to you.