Утилита для работы с демками в формате 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
Теперь все готово.