Лоадеры - как оно внутри устроено?

Автор kleptos, 04 сентября 2007 15:35:02

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

kleptos

Подскажите, а куда и как лоадер раскладывает файлы из арзива с fm?
Дело в том, что по некоторым причинам меня не очень устраивает darkloader и хочеться написать свой. Но я мало что понимаю в расположении игровых ресурсов вора, а dark loader достаточно плохо написан и выдрать логику его действий из трёх тысяч строк мешанины малость затруднительно.

Force

kleptos, отлично, если ты это осилишь и напишешь лоадер лучше, внедришь туда новые полезные функции под заказ, да ещё и нам его потом дашь, то мы будем очень благодарны! :yes:
А логика проста - распаковка архива в директорию с игрой и при наличии одноименных файлов в одноименных папках создание бэкапа, упаковка его и хранение до удаления миссии.
Удаляется миссиия тоже просто - при установке создается список файлов, которые были в архиве. Производится их удаление, а при наличии бэкапного архива - распаковка его в директорию с игрой.
Дарклоадер поддерживает переконвертирование звуковых файлов из формата ogg и mp3 в формат WAV IMA ADPCM, поэтому не исключено, что ты больше провозишься именно с этим, кроме того, давняя мечта - прикрутить поддержку более современных архиваторов, типа RAR или 7Z, но существует вероятность того, что это не очень хорошая идея ввиду медлительности (и ограниченности на объем физической памяти) "тяжеловесных" режимов распаковки этих форматов.
Кроме того, чтобы написать качественный лоадер, необходимо научить его определять тип фан-миссии (для какой части Вора она), какие в ней есть дополнительные материалы, кроме самой миссии (карта, автокарта, новые модели, звуки и т.п.), показывать содержимое текстового файла, упакованного с ней и правильно формировать список миссий (то есть правильно вытаскивать название миссии из архива, особенно актуально для кампаний).
Примерно так. Если не испугался, и даже наоборот - тогда мы всячески тебе будем помогать и подсказывать по мере сил и возможностей. :yes:

kleptos

В общем не пугает, по всему там логики действий строк на 50 (и раза в четыре больше на рюшечки вроде окошек и архивов/конвертации).
Мне-бы очень помогло описание структуры каталогов вора.
Смотрю на содержимое fm и понимаю далеко не всё.
Насчёт поддержки архивов - gzip, bzip2, zip точно будет, rar и 7z - наверное да, хотя это немного сложнее.
[Исправлено: kleptos, 4 сен. 2007 16:24]

DJ Riff

Force
Цитироватьиз формата ogg и mp3 в формат WAV IMA ADPCM
Не обязательно в IMA ADPCM, можно и в несжатый PCM вроде бы.
Про структуру папок можно посмотреть здесь:
http://thief-thecircle.com/dromed/displaysubject.asp?titleID=75&title=Folder%20Setup&sub=Miscellaneous
Хорошо бы ФМ-строитель туда заглянули — возможно, текст устарел и в современных ФМ ещё какие-нибудь фишки используются.
Тьма тоже распространяется со скоростью света.

kleptos

DJ Riff Спасибо, познавательно.
А как это всё раскладываеться? Точнее, какая структура папок у самого вора?
Я конечно могу начать устанавливать различные миссии с сравнивать папку с игрой до и после, но есть большая вероятность что-то пропустить и потом долго лечить баги.
[Исправлено: kleptos, 4 сен. 2007 20:07]

winter cat

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

Zontik

Цитироватьправильно вытаскивать название миссии из архива, особенно актуально для кампаний
Вот с этим как раз у Dark Loader проблемы. Хотя, возможно, это не программа виновата, просто в самой структуре данных в Thief не предусмотрено названия для кампании. DarkLoader по умолчанию называет всю кампанию по имени последней миссии, и приходится с этим считаться.
Я эту проблему решил тупейшим образом: добавил лишний пустой файл miss(n+1).mis и прописал его в titles.str с нужным названием.
Пожалуй, это единственное, что мне не понравилось в DarkLoader.
Дайте глазам отдохнуть! Тёмное место

Force

ЦитироватьМеня вполне устраивает DarkLoader, не понимаю какие могут быть претензии, как он может быть написан плохо, если его писал самый мудрый таффер на ттлг, который лучше кого-либо другого знает Thief с программной стороны.
kleptos, не обращай внимания... Было бы круто, потом ещё поддержку Thief 3 внедрить...
Добавлено позже
ЦитироватьА как это всё раскладываеться? Точнее, какая структура папок у самого вора?
В смысле? Так как по ссылке написано, так всё и раскладывается. В архиве всё в соответствующих подпапках находится. Тебе нет никакой необходимости вообще знать структуру ФМ для того чтобы её УСТАНОВИТЬ. Это надо знать только в том случае, когда ты инфу о миссии добываешь, чтобы отобразить её красиво.

DJ Riff

kleptos
В самом воре ресурсы лежат в папке, указанной в install.cfg (darkinst.cfg для Т2) в строке resname_base. Путь может быть как абсолютный, так и относительный. В некоторых версиях наблюдается бардак, т.е. есть файл RES\SND.CRF, но также лежит и SND.CRF в корне игры, в котором ещё несколько звуков. В оригинальном Gold ресурсы лежат в корне, в более поздних вериях (те, что в своё время были доступны в онлайн-магазинах для скачивания) они собраны в папку RES, а если до этого был установлен Darkloader, то лежать они будут в папке CRF. А ещё в некоторых версиях архвы CRF распакованы и лежат в виде папок. :littlecrazy: В общем, для облегчения себе жизни советую провести оптимизацию при установке лоадера: найти все ресурсы и переместить в соответствующие архивы в папку RES.
При установке ФМ лоадер копирует папки содержимое её архива в корень. Таким образом игра сначала идёт в корень за ресурсами из FM, а при недостаче — в папку RES и соответствующий *.CRF
Кроме того, стоит проверить, нет ли в архиве с FM совпадающих по имени файлов. Например, FM-строителю может приспичить положить изменённый Dark.gam, Convict.osm, да мало ли что ещё. Тогда придётся делать резервную копию оригинального файла и восстанавливать её после удаления FM.
[Исправлено: DJ Riff, 5 сен. 2007 11:18]
Тьма тоже распространяется со скоростью света.

S.Siamsky

В Darkloader'е названия русифицированных FM-ок по-прежнему отображаются кракозябрами, хотя теперь и есть поддержка русского языка.
Szybko, szybko, geht der ab!

winter cat

Force
ЦитироватьБыло бы круто, потом ещё поддержку Thief 3 внедрить...
В Darkloader-е нету поддержки для Thief 3 по той причине что он для Dark Engine игр, тоесть T3 сюда не относится, поэтому и есть приставка Dark. Да и в автор вроде говорил что уже вроде закончил с DarkLoader-ом. Для Thief 3 есть GarrettLoader, он хоть поддерживает побольше игр, но он очень неудобный по сравнению с Darkloader-ом. Поэтому я выбрал второй.

kleptos

Winter Cat Повторяю ещё раз мне он не подходит.
Что-же насчёт качества написания, то внутри лоадер это жуткая мешанина из низкокачественного индуского кода из которой даже логику действий выдрать крайне сложно, не говоря уже о том что-бы что-то поменять.
DJ Riff
Спасибо за разьясьнения, вроде стало более-менее понятно.
Провёл сегодня пару экспериментов - стало более-менее понятно как оно работает.
В приципе если дописать вперёд resname_base, load_path, script_module_path и movie_path свою директорию то можно выложить туда fm и оно будет вроде работать.
Поправьте еслия не прав (исключая вопросы разжатия аудио)

clearing


DJ Riff

Цитироватьresname_base, load_path, script_module_path и movie_path свою директорию то можно выложить туда fm и оно будет вроде работать.
Теоретически да. Но, насколько я помню, пока никто не пробовал менять все эти строки. Т.е. например:
load_path .\fm+.
Если в папке FM лежит изменённый dark.gam, но нет convict.osm, то будет ли игра брать dark.gam из FM, а convict.osm из корня?
Для тестирования этого момента, кстати, вполне подойдёт патч "экстремальной сложности", там как раз изменён dark.gam.
Тьма тоже распространяется со скоростью света.

kleptos

Нет, папки с fm ресурсами перед родными путями.
По крайней мере в quake world и его наследниках использовался схожий механим поиска ресурсов и такая уловка там работала.
У меня сейчас вот так.
Цитировать
cd_path
install_path D:\games\thief2
language english
resname_base D:\games\thief2\foo\+D:\games\thief2\res
load_path D:\games\thief2\foo\+D:\games\thief2
script_module_path D:\games\thief2\foo\+D:\games\thief2
movie_path D:\games\thief2\foo\movies\+D:\games\thief2\movies
Далее просто распаковываем fm'ку в  D:\games\thief2\foo и оно пашет.
Проверял пока с AshenAge