mvdtool

Утилита для работы с демками в формате MVD для Quake 2.

Поддерживаются следующие режимы работы:

Отладочные режимы:

Скачать

Утилита mvdtool распространяется под BSD-совместимой лицензией.

Синтаксис

mvdtool strings [входная_демка] [выходной_журнал]
mvdtool split [входная_демка] [начальная_метка,конечная_метка@выходная_демка] [...]
mvdtool cut [входная_демка] [выходная_демка] [начальная_метка,конечная_метка] [...]

Метки времени могут задаваться одним из следующих образов:

Метки времени всегда отсчитываются от начала демки. Для расчета номеров блоков следует учитывать, что один блок занимает 0.1 секунды (демки пишутся с фиксированной частотой в 10 FPS).

Пример использования

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

Для начала необходимо получить журнал текстовых сообщений из демки:

$ mvdtool strings 4fun-cccp.mvd2 4fun-cccp.txt

Просматриваем файл 4fun-cccp.txt:

[0:00.0] -----------------------
[0:00.0] The Edge
[0:02.6] [CCCP]AONE ate 4fun]rasK's rocket
[0:03.1] [CCCP]AONE: and
[0:07.1] wision: and what
[0:07.8] [CCCP]AONE: tell all maps
<...>
[5:10.1] All players ready! Starting countdown (15 secs)...
<...>
[23:11.6] Timelimit hit. Match ended.
[23:11.6] Gents wins, 39 to 33.
[23:16.6] Please report any bugs at www.opentdm.net.
<...>

Из журнала узнаем, что для первой карты необходимо взять все блоки в диапазоне [5:10.1, 23:16.6). Для остальных карт метод поиска диапазона аналогичен. Формируем опции командной строки для режима split:

$ mvdtool split 4fun-cccp.mvd2 5:10.1,23:16.5@4fun-cccp-dm1-uncut.mvd2 \
                               24:20.0,39:39.9@4fun-cccp-match1.mvd2 \
                               43:43.5,59:03.4@4fun-cccp-ztn3.mvd2 \
                               60:00.0,75:19.9@4fun-cccp-dm3.mvd2

Замечаем, что на первой карте было два таймаута, которые нужно удалить. Создаем новый журнал сообщений для первой карты, т.к. метки времени изменились:

$ mvdtool strings 4fun-cccp-dm1-uncut.mvd2 4fun-cccp-dm1-uncut.txt

Просматриваем файл 4fun-cccp-dm1-uncut.txt:

<...>
[7:37.8] [CCCP]SHUUGGHH (Ladies) called a time out. Match will resume automatically in 5:00.
[7:42.8] Game resuming in 10 seconds. Match time remaining: 7:37
[7:43.6] [CCCP]SHUUGGHH: ok
[7:48.2] 5
[7:49.2] 4
[7:50.2] 3
[7:51.2] 2
[7:52.2] 1
[7:53.2] Fight!
<...>

Для удаления первого таймаута необходимо вырезать все блоки в диапазоне [7:37.8, 7:53.2]. Для второго таймаута метод поиска диапазона аналогичен. Формируем опции командной строки для режима cut:

$ mvdtool cut 4fun-cccp-dm1-uncut.mvd2 4fun-cccp-dm1.mvd2 7:37.8,7:53.2 9:12.1,11:43.2 

Теперь все готово.