Сижу в ожидании вопросов, предложений и угроз
По совету Pop'а начну писать доку на русском. Прямо тут.
Что такое fifafs, для кого и для чего оно?
Это утилита для корректной работы с "файловой системой фифы", которая находится в каталоге data и состоит из файлов zdata_xx.big, zdata_xx.bh и fifa.fat. А также для работы с простыми .big файлами. Под "работой" подразумевается добавление, замена, извлечение и удаление файлов из .big-ов.
Изначально fifafs создавался для установки РПЛ, поэтому его основное предназначение - это добавление и замена большого количества файлов в zdata_xx.big. fifafs оптимизирован именно для этого и справляется с этим очень быстро.
Для fifafs можно написать скрипт с последовательностью команд, что дает возможность выполнять какие-то нетривиальные задачи.
Соответственно, основная сфера применения - это установка патчей и использование в других программах, которые что-то меняют в фифе. Со временем fifafs оброс дополнительным функционалом, поэтому его можно использовать в каких-то повседневных патчмейкерских нуждах.
fifafs не имеет графического интерфейса, это консольная программа. Это значит, что нет никакого окошечка, где надо тыкать мышкой. Это делает возможным использование fifafs для автоматизации рутинных задач с помощью написания скриптов либо .bat файлов. Например, если вы трудитесь над некими файлами и вам регулярно надо вставлять их в фифу и проверять как они работают, можно 1 раз написать скрипт и потом запускать его, вместо того, чтобы каждый раз открывать File Master, искать и заменять эти файлы.
Чем fifafs не является и чего не умеет?
fifafs не делает футболки, бортики, лица, телеканалы и проч. Не конвертирует форматы и не работает с графикой, звуком, видео и т.п.
Все это вам предстоит сделать самостоятельно, а fifafs может помочь лишь безболезненно установить ваше добро в игру.
Что вообще такое "файловая система фифы" и как fifafs с ней работает
"Файловая система фифы" в дальнейшем - ФС для краткости.
В фифе есть куча файлов, скажем, около 20 тысяч файлов - это всякие лица, футболки и прочее. Они упакованы в последовательно нумерованные zdata_01.big, zdata_02.big, zdata_03.big и т.д. В каждом таком zdata_xx.big по 500 файлов. Это сделано, чтобы 20 тысяч файлов просто так не валялись в каталоге и не создавали проблем
. Чтобы фифе знать, в каком из zdata_xx.big находится нужный ей конкретный файл, существует fifa.fat, где эта информация хранится.
Когда вы указываете fifafs каталог, где находится подобная структура (fifa.fat + zdata_xx), он понимает, что имеет дело с ФС. В этом случае, он работает со всеми 20 тысячами файлов. Если вы попросите заменить некий файл в ФС, fifafs сам найдет, в каком zdata_xx этот файл лежит, заменит его и обновит информацию в fifa.fat.
В этом основное отличие от других утилит, которые просто позволяют поковыряться в одном из zdata_xx.big, а потом запустить процедуру обновления fifa.fat.
Команды для запуска из консоли
В квадратных скобках ([-c]) указан текст, который можно опустить.
"fifadatadir" - это каталог ФС, где лежат файлы zdata_xx.big и fifa.fat.
"file.fsh" - это некий файл для примера, не обязательно fsh.
Запуск скрипта script.txt:
Добавление файла в ФС (если файл уже есть, будет ошибка):
Цитата:
fifaFS.exe -a[:N] fifadatadir file.fsh [-c]
|
По умолчанию fifafs добавляет файл в последний из zdata_xx.big. Если в последнем zdata_xx.big становится более 500 файлов, fifafs создает следующий zdata_xx.big и добавляет туда. Однако, иногда фифа не видит файлы, добавленные "в конец". Поэтому можно принудительно указать, в какой zdata_xx.big производить добавление. ":N" - это номер в zdata_N.big.
Например,
Цитата:
fifaFS.exe -a:1 fifadatadir file.fsh
|
добавит file.fsh в zdata_01.big.
Замена файла в ФС (если такого файла нет, будет ошибка):
Цитата:
fifaFS.exe -r fifadatadir file.fsh [-c]
|
Добавление или замена файла в ФС:
Цитата:
fifaFS.exe -ar[:N] fifadatadir file.fsh [-c]
|
Если файла нет - он будет добавлен, если есть, то заменен. ":N" действует также как при добавлении файла.
Вытаскивание файла из ФС:
Цитата:
fifaFS.exe -e fifadatadir infile.fsh outfile.fsh
|
fifafs поищет infile.fsh в ФС, если он там есть, он его вытащит и запишет в файл с именем outfile.fsh
Удаление файла из ФС:
Цитата:
fifaFS.exe -del fifadatadir file.fsh
|
Обновить fifa.fat и zdata_xx.bh:
Цитата:
fifaFS.exe -fix fifadatadir
|
Эта команда обновляет fifa.fat и приводит его в соответствие с содержимым файлов zdata_xx.big.
Если вы поковырялись в одном из zdata_xx.big, какой-либо утилитой, то fifa.fat следует обновить.
Создать ФС:
Цитата:
fifaFS.exe -createfs d:\newfifafs\ d:\myfiles\*.*
|
Уже не помню, зачем эта функция понадобилась.
В каталоге d:\newfifafs будет создана структура ФС, куда будут запакованы все файлы из каталога d:\myfiles\
Разумеется, имена каталогов просто для примера даны, можете использовать любые.
Распаковать ФС:
Цитата:
fifaFS.exe -depackfs fifadatadir d:\myfiles\
|
Распакует все файлы из ФС и свалит в каталог d:\myfiles\
Получить список всех файлов ФС:
Цитата:
fifaFS.exe -l fifadatadir list.csv
|
в list.csv будет записан список файлов и еще кое-какая инфа. В формате CSV (в экселе можно открыть)
...
Использование файловых масок
...
Использование переменных
...
Скрипты
...
fsh-хэширование
...
Консольная и win-версия
...
config.xml
config.xml - XML-файл в котором можно задать некоторые настройки fifafs, такие как: игра по умолчанию, параметры прогресс-бара. Также через него можно добавлять новые переменные (которые могут читаться из реестра).
При запуске fifafs, первым делом загружается config.xml, находящийся в том же каталоге, что и fifafs.exe (если он там есть). Затем загружается config.xml из текущей папки (если есть). Значения из второго config.xml дополняют и перезаписывают значения первого.
Как это можно использовать? Например, если вы работаете с игрой, которая не является игрой по умолчанию (например, FIFA Manager 10), в каталог с fifafs.exe можно положить config.xml следующего содержания:
Цитата:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<defaultgame>fm10</defaultgame>
</config>
|
Теперь при запуске не нужно каждый раз добавлять "-gametype=fm10".
Прогресс-бар
Выглядит как-то так:
Прогресс-бар призван ответить на вопрос пользователя "а че сейчас происходит-то" при установке больших патчей. Сделан в виде отдельного модуля и находится в файле ffspbar.dll. Следовательно, чтобы прогресс-бар появился, первое условие - это наличие ffspbar.dll в каталоге с fifafs.exe.
Второе условие - его надо включить в config.xml (см. выше что это за файл). В архиве есть пример config.xml с настройками для прогресс-бара. Вот он:
Цитата:
<config>
<progressbar>
<visible>1</visible>
<title>FIFAFS Working...</title>
<sections>
<section>
<codename>parse</codename>
<part>5</part>
<text>Initalizing...</text>
</section>
<section>
<codename>mount</codename>
<part>5</part>
<text>Reading FIFA files...</text>
</section>
<section>
<codename>sort_tasks</codename>
<part>5</part>
<text>Prepairing tasks...</text>
</section>
<section>
<codename>load_files</codename>
<part>15</part>
<text>Loading files...</text>
</section>
<section>
<codename>fsh_hash</codename>
<part>20</part>
<text>Writing FSH hashes...</text>
</section>
<section>
<codename>compress</codename>
<part>20</part>
<text>Compressing files...</text>
</section>
<section>
<codename>big_work</codename>
<part>25</part>
<text>Importing files...</text>
</section>
<section>
<codename>create_fat</codename>
<part>5</part>
<text>Rebuilding fifa.fat && .bh files...</text>
</section>
</sections>
</progressbar>
</config>
|
Разберем подробнее:
<visible>1</visible> - означает, что прогресс-бар нужно показывать. "0" - не показывать.
<title>FIFAFS Working...</title> - заголовок окна (он показывается на панели задач).
В тэге <sections> заключены настройки для каждого из этапов работы fifafs.
Всего таких этапов 8 штук: parse, mount, sort_tasks, load_files, fsh_hash, compress, big_work, create_fat.
Какие-то этапы проходят быстрее, какие-то медленнее. Для того, чтобы пользователь видел более-менее равномерно бегущий прогресс-бар, требуется дополнительная подстройка отображения этапов на прогресс-баре для каждого конкретного патча.
Цитата:
<section>
<codename>parse</codename>
<part>5</part>
<text>Initalizing...</text>
</section>
|
<codename>parse</codename> - ID этапа, менять его нельзя.
<part>5</part> - кол-во "места", отводящееся на этап на прогресс баре (в процентах). Чем больше этап занимает по времени, тем больше ему нужно прописать процентов. Сумма всех <part>...</part> должна составить в итоге 100.
<text>Initalizing...</text> - название этапа, выводится как подпись под прогресс баром.
Патчи все разные, поэтому одного "рецепта" на всех быть не может. Где-то этап fsh_hash вообще не нужен и ему можно смело поставить <part>0</part>. Какие-то патчи исправляют только обычные big-и и не трогают ФС. Тогда этапу create_fat ставится ноль. И т.д.
Да, кстати, XML должен быть валидным. Если fifafs вылетает, проверьте, что все тэги закрыты, а плохие символы экранированы.