Thief: the Dark Fate Forum

Thieves Connection => Fan-Миссии => Тема начата: kleptos от 04 сентября 2007 15:35:02

Название: Лоадеры - как оно внутри устроено?
Отправлено: kleptos от 04 сентября 2007 15:35:02
Подскажите, а куда и как лоадер раскладывает файлы из арзива с fm?
Дело в том, что по некоторым причинам меня не очень устраивает darkloader и хочеться написать свой. Но я мало что понимаю в расположении игровых ресурсов вора, а dark loader достаточно плохо написан и выдрать логику его действий из трёх тысяч строк мешанины малость затруднительно.
Название: Лоадеры - как оно внутри устроено?
Отправлено: Force от 04 сентября 2007 15:49:11
kleptos, отлично, если ты это осилишь и напишешь лоадер лучше, внедришь туда новые полезные функции под заказ, да ещё и нам его потом дашь, то мы будем очень благодарны! :yes:
А логика проста - распаковка архива в директорию с игрой и при наличии одноименных файлов в одноименных папках создание бэкапа, упаковка его и хранение до удаления миссии.
Удаляется миссиия тоже просто - при установке создается список файлов, которые были в архиве. Производится их удаление, а при наличии бэкапного архива - распаковка его в директорию с игрой.
Дарклоадер поддерживает переконвертирование звуковых файлов из формата ogg и mp3 в формат WAV IMA ADPCM, поэтому не исключено, что ты больше провозишься именно с этим, кроме того, давняя мечта - прикрутить поддержку более современных архиваторов, типа RAR или 7Z, но существует вероятность того, что это не очень хорошая идея ввиду медлительности (и ограниченности на объем физической памяти) "тяжеловесных" режимов распаковки этих форматов.
Кроме того, чтобы написать качественный лоадер, необходимо научить его определять тип фан-миссии (для какой части Вора она), какие в ней есть дополнительные материалы, кроме самой миссии (карта, автокарта, новые модели, звуки и т.п.), показывать содержимое текстового файла, упакованного с ней и правильно формировать список миссий (то есть правильно вытаскивать название миссии из архива, особенно актуально для кампаний).
Примерно так. Если не испугался, и даже наоборот - тогда мы всячески тебе будем помогать и подсказывать по мере сил и возможностей. :yes:
Название: Лоадеры - как оно внутри устроено?
Отправлено: kleptos от 04 сентября 2007 16:12:24
В общем не пугает, по всему там логики действий строк на 50 (и раза в четыре больше на рюшечки вроде окошек и архивов/конвертации).
Мне-бы очень помогло описание структуры каталогов вора.
Смотрю на содержимое fm и понимаю далеко не всё.
Насчёт поддержки архивов - gzip, bzip2, zip точно будет, rar и 7z - наверное да, хотя это немного сложнее.
[Исправлено: kleptos, 4 сен. 2007 16:24]
Название: Лоадеры - как оно внутри устроено?
Отправлено: DJ Riff от 04 сентября 2007 17:39:58
Force
Цитироватьиз формата ogg и mp3 в формат WAV IMA ADPCM
Не обязательно в IMA ADPCM, можно и в несжатый PCM вроде бы.
Про структуру папок можно посмотреть здесь:
http://thief-thecircle.com/dromed/displaysubject.asp?titleID=75&title=Folder%20Setup&sub=Miscellaneous
Хорошо бы ФМ-строитель туда заглянули — возможно, текст устарел и в современных ФМ ещё какие-нибудь фишки используются.
Название: Лоадеры - как оно внутри устроено?
Отправлено: kleptos от 04 сентября 2007 20:07:04
DJ Riff Спасибо, познавательно.
А как это всё раскладываеться? Точнее, какая структура папок у самого вора?
Я конечно могу начать устанавливать различные миссии с сравнивать папку с игрой до и после, но есть большая вероятность что-то пропустить и потом долго лечить баги.
[Исправлено: kleptos, 4 сен. 2007 20:07]
Название: Лоадеры - как оно внутри устроено?
Отправлено: winter cat от 04 сентября 2007 23:26:02
Меня вполне устраивает DarkLoader, не понимаю какие могут быть претензии, как он может быть написан плохо, если его писал самый мудрый таффер на ттлг, который лучше кого-либо другого знает Thief с программной стороны.
Название: Лоадеры - как оно внутри устроено?
Отправлено: Zontik от 05 сентября 2007 10:06:41
Цитироватьправильно вытаскивать название миссии из архива, особенно актуально для кампаний
Вот с этим как раз у Dark Loader проблемы. Хотя, возможно, это не программа виновата, просто в самой структуре данных в Thief не предусмотрено названия для кампании. DarkLoader по умолчанию называет всю кампанию по имени последней миссии, и приходится с этим считаться.
Я эту проблему решил тупейшим образом: добавил лишний пустой файл miss(n+1).mis и прописал его в titles.str с нужным названием.
Пожалуй, это единственное, что мне не понравилось в DarkLoader.
Название: Лоадеры - как оно внутри устроено?
Отправлено: Force от 05 сентября 2007 10:47:24
ЦитироватьМеня вполне устраивает DarkLoader, не понимаю какие могут быть претензии, как он может быть написан плохо, если его писал самый мудрый таффер на ттлг, который лучше кого-либо другого знает Thief с программной стороны.
kleptos, не обращай внимания... Было бы круто, потом ещё поддержку Thief 3 внедрить...
Добавлено позже
ЦитироватьА как это всё раскладываеться? Точнее, какая структура папок у самого вора?
В смысле? Так как по ссылке написано, так всё и раскладывается. В архиве всё в соответствующих подпапках находится. Тебе нет никакой необходимости вообще знать структуру ФМ для того чтобы её УСТАНОВИТЬ. Это надо знать только в том случае, когда ты инфу о миссии добываешь, чтобы отобразить её красиво.
Название: Лоадеры - как оно внутри устроено?
Отправлено: DJ Riff от 05 сентября 2007 11:14:08
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 от 05 сентября 2007 12:01:42
В Darkloader'е названия русифицированных FM-ок по-прежнему отображаются кракозябрами, хотя теперь и есть поддержка русского языка.
Название: Лоадеры - как оно внутри устроено?
Отправлено: winter cat от 05 сентября 2007 18:42:38
Force
ЦитироватьБыло бы круто, потом ещё поддержку Thief 3 внедрить...
В Darkloader-е нету поддержки для Thief 3 по той причине что он для Dark Engine игр, тоесть T3 сюда не относится, поэтому и есть приставка Dark. Да и в автор вроде говорил что уже вроде закончил с DarkLoader-ом. Для Thief 3 есть GarrettLoader, он хоть поддерживает побольше игр, но он очень неудобный по сравнению с Darkloader-ом. Поэтому я выбрал второй.
Название: Лоадеры - как оно внутри устроено?
Отправлено: kleptos от 06 сентября 2007 02:56:18
Winter Cat Повторяю ещё раз мне он не подходит.
Что-же насчёт качества написания, то внутри лоадер это жуткая мешанина из низкокачественного индуского кода из которой даже логику действий выдрать крайне сложно, не говоря уже о том что-бы что-то поменять.
DJ Riff
Спасибо за разьясьнения, вроде стало более-менее понятно.
Провёл сегодня пару экспериментов - стало более-менее понятно как оно работает.
В приципе если дописать вперёд resname_base, load_path, script_module_path и movie_path свою директорию то можно выложить туда fm и оно будет вроде работать.
Поправьте еслия не прав (исключая вопросы разжатия аудио)
Название: Лоадеры - как оно внутри устроено?
Отправлено: clearing от 06 сентября 2007 08:22:03
Вспомнил. Ещё ведь был DarkFate Loader (http://darkfate.ru/forum/topic.cgi?forum=3&topic=2&start=0) и DarkFate Loader 3 (http://darkfate.ru/forum/topic.cgi?forum=3&topic=20&start=0).
Название: Лоадеры - как оно внутри устроено?
Отправлено: DJ Riff от 06 сентября 2007 10:06:57
Цитировать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 от 06 сентября 2007 14:13:49
Нет, папки с 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
Название: Лоадеры - как оно внутри устроено?
Отправлено: Force от 06 сентября 2007 14:18:11
Этот подход лучше чем в ДЛ, согласен, круто :up:, не нужно бэкапы делать, а каталог игры вообще не трогается :yes:.
Название: Лоадеры - как оно внутри устроено?
Отправлено: clearing от 06 сентября 2007 14:29:33
ЦитироватьПроверял пока с AshenAge
Цитироватькаталог игры вообще не трогается
В Dance With The Dead (http://darkfate.ru/index.cgi?show=files/fan-missions/Thief2/Dance_With_The_Dead) dark.cfg свой.
Название: Лоадеры - как оно внутри устроено?
Отправлено: Force от 06 сентября 2007 14:44:41
clearing, ну так он и будет грузиться из папки миссии в первую очередь, а если его там нет, то из игровой.
Название: Лоадеры - как оно внутри устроено?
Отправлено: DJ Riff от 06 сентября 2007 15:01:03
Цитироватьпапки с fm ресурсами перед родными путями
Так я это и написал: ".\fm" — это папка с ФМ, "." — это корень.
Если будешь работать с абсолютными путями, не забудь, что Вора могут установить в Program Files или ещё в какой-нибудь путь с пробелами.
Ага, если он из папки foo достаёт *.mis, то вроде и с dark.cfg проблем быть не должно.
Название: Лоадеры - как оно внутри устроено?
Отправлено: Force от 06 сентября 2007 15:23:25
DJ Riff, кстати, вроде бы T2X так же пашет...
kleptos, кстати, реально, вместо абсолютных путей автоматом всё надо преобразовать в относительные.
Название: Лоадеры - как оно внутри устроено?
Отправлено: kleptos от 06 сентября 2007 17:10:02
clearing
Сейчас скачаю, посмотрю как оно.
Но вроде A Keeper of the Prophecies работает нормально, хотя у него тоже есть свой dark.cfg (один фиг во второй миссии застрял)
Может есть где описание настроек dark.cfg? можно было-бы испортить какую-либо настройку что-бы эффект был заведомо виден и проверить тем самым используеться этот конфиг или нет.

Название: Лоадеры - как оно внутри устроено?
Отправлено: Force от 06 сентября 2007 18:09:44
kleptos, удали его из корня и всё.
Название: Лоадеры - как оно внутри устроено?
Отправлено: kleptos от 06 сентября 2007 19:03:14
Force
Если подвинуть из корня оригинальный dark.cfg - падает.
В прицнипе логично, скорее всего theif2.exe берёт конфиги из текущей рабочей директории, обычно это папка где лежит экзешник, но этим параметром можно манипулировать, и если там их нет, то дохнет.
Более того, если скопировать конфиги в произвольную директорию и при запуске вора сделать её текущей рабочей, проще всего это сделать через cmd.exe, сменив сначала текушую диреткорию на директорию с конфигами, а потом запустить exe вора, то вор работать будет.

Тоесть принцип работы мне видиться примерно такой - в отдельную директорию распаковываютсья все файлы fm, в другую специальную директорию складываются изменённые конфиги, обьёдинённые с конфигами fm.
После чего вор запускаеться из этой директории с особыми конфигами. В прицнипе t2x loader примерно так и работает.
Неоспоримый плюс такого подхода - файлы самой игры вообще не трогаютья (за исключением сэйвок, с этим надо будет ещё подумать - да) и при желании в новом корне можно чудить что душе угодно.
Сосбно в ближайшие пару дней навреное сооружу первую консольную версию, нужны будут тестеры.
Название: Лоадеры - как оно внутри устроено?
Отправлено: winter cat от 07 сентября 2007 00:05:29
kleptos И зачем ты всё это затеял. Это ж морока. Код Darkloader-а непонятен потому не ты писал прогу, зачем тогда решил её переделывать? Кстати путь к dark.gam, скриптам и миссиям указывается одним параметром load_path. Описаний всех конфигов нигде нет, есть только список на сайте Darkloader-а. Но ты как программист можешь отreverse-engineer-ить экзешник игры и глянув на код конфигов узнать что они делают.
Название: Лоадеры - как оно внутри устроено?
Отправлено: kleptos от 07 сентября 2007 06:27:58
Winter Cat Я затеял потому-что dark loader мне не нравится, вполне веская причина я считаю.
С реверс инжинирингом всё очень просто, я могу долго возиться с какой-то не очень очевидной фичей, по которую здесь уже давно знают.  И не факт что получу результат, не говоря уже о бессмысленности произведённых усилий.
Поэтому проще сначала спросить, опираясь на опыт и знания сообщества, а потом уже, если никто про это не знает, ставить эксперименты.
Что-же до качества кода - схожий стиль программирования я встречал только в исходниках самых низкоквалифицорованных (быдло)кодеров. Обычно это правда было что-то написаное за копейки на php.
Маленькая демонстрация качества кода.
Рамер исходного кода DarkLoader - 5081 строк, размер исходного кода icq клиента r&q - 40354 строк, тоесть всего в ~8 раз больше.
А теперь подумайте, как много делает r&q и как много DarkLoader.
[Исправлено: kleptos, 7 сен. 2007 6:28]
Название: Лоадеры - как оно внутри устроено?
Отправлено: clearing от 07 сентября 2007 09:34:51
ЦитироватьСосбно в ближайшие пару дней навреное сооружу первую консольную версию, нужны будут тестеры.
Жду.
Название: Лоадеры - как оно внутри устроено?
Отправлено: DJ Riff от 07 сентября 2007 10:04:11
Цитироватьсооружу первую консольную версию
Можешь меня тоже в бета-тестеры записывать.
А ещё я втайне надеюсь, что консольная версия тоже дойдёт до релиза вместе с GUI. :sly:
Название: Лоадеры - как оно внутри устроено?
Отправлено: S.Siamsky от 07 сентября 2007 12:51:05
Раз пошла такая пьянка, готов поучаствовать в тестинге.
Название: Лоадеры - как оно внутри устроено?
Отправлено: Force от 07 сентября 2007 14:56:00
Как-то уж больно грандиозно - затевать тестинг для такой маленькой наработки... Выкладывай для всех, а те, кто обещали, подробно отпишут о найденных багах. У меня, если время и возможность будет, тоже отпишусь. Было бы что тестить...
Тестить нужно готовый проект, а не его микрокусочек, иначе, получив лестные отзывы, не захочется продолжать разработку дальше.
Название: Лоадеры - как оно внутри устроено?
Отправлено: kleptos от 07 сентября 2007 15:03:44
Не учите меня как разрабатывать софт, а я не буду учить вас как делать fm, ок?
Грубо-говоря для первоначальной обкатки хватит 2-3 человек с возможностью быстрого контакта через icq или какой другой im.
Название: Лоадеры - как оно внутри устроено?
Отправлено: winter cat от 07 сентября 2007 17:41:48
kleptos Делать FM куда больше удовольствие чем рыться в коде, хотя первое часто бывает если не очень сложным, то нудным делом. Но как никак я тоже не против потестить твоё будущее творение. И как я понимаю ты умеешь быстро легко вскрывать код и видеть из чего состоит субъект. А ты бы смог таким образом в Thief скажем пофиксить баг к примеру если этот баг будет касаться AI?

[Исправлено: Winter Cat, 7 сен. 2007 20:13]
Название: Лоадеры - как оно внутри устроено?
Отправлено: Force от 07 сентября 2007 18:17:01
kleptos, ой прости-прости, молчу и не мешаюсь. Разрабатывайте самостоятельно.
Название: Лоадеры - как оно внутри устроено?
Отправлено: kleptos от 07 сентября 2007 22:10:52
Winter Cat
Я не волшебник, я просто знаю по каким магическим законам работают програмы.
Серьёзным реверс инжинирингом я не знанимаюсь, у меня в общем-то немного другая специалиазация. Я не спец в c, c++ и asm. Но судя исходникам tnhScript.osm и наличию файлика archer.osm вполне вероятно, что ai лежит именно в osm (это обычный dll кстати). В прицнипе если есть баг, то можно написать GayleSaver или Totality (авторы tnh) и спросить о теоретической возможности фикса у них, думаю им лучше знать.
Force
Ничего не мешает мне выкладывать в паблик начиная с самых ранних версий, просто нужно пару человек на оперативный тестинг.
Сегодня ночью навреное сяду похачу, мож чего у утру будет.
Название: Лоадеры - как оно внутри устроено?
Отправлено: winter cat от 07 сентября 2007 22:42:09
kleptos OSM файлы - это скрипты, а баг который я имел введу  со скриптами вовсе не связан и лежит глубоко в движке, где и сердцеввиный код AI, тоесть в экзешнике пришлось бы рыться. Я писал по поводу этого бага Telliamed-у, но ему похоже самому не очень понятен этот баг, но главное он его заинтерисовал, только в последнее особо не до этого, занят скриптами, Darkloader-ом, сайтом Dromesday Book и прочее. Но сказал что как-нибудь глянет.
Название: Лоадеры - как оно внутри устроено?
Отправлено: kleptos от 07 сентября 2007 23:41:18
Ну тогда я тем более не помошник, я очень мало завязываюсь на такие низкоуровневые детали и уж тем более не смогу отдебажить релизную сборку бинарника про который крайне мало что знаю.
Название: Лоадеры - как оно внутри устроено?
Отправлено: Zontik от 10 сентября 2007 10:11:37
ЦитироватьДелать FM куда больше удовольствие чем рыться в коде
Winter Cat, каждому своё. Кому-то нравится больше играть в FM, чем делать их (и вовсе не обязательно из-за лени или неумения). А кому-то копаться в коде намного интереснее, чем бороться с DromEd'ом и вылизывать сценарий. Я в принципе понимаю и тех, и других, и третьих. Кстати, если бы не третьи - не было бы ни DarkLoader, ни OPDE...
Название: Лоадеры - как оно внутри устроено?
Отправлено: kleptos от 14 сентября 2007 21:42:07
Привет всем, в общем я заглянул сообщить, что не забросил идею.
Но у меня не получалось уделить новому лоадеру достаточно времени.
Однако посидев сегодня и вчера, я вроде почи доделал гуй, заодно изучив tk :biggrin:.
В общем я надеюсь в скором вермени выложить в паблик первый релиз.
stay tuned.
Название: Лоадеры - как оно внутри устроено?
Отправлено: DJ Riff от 14 сентября 2007 22:36:28
А что, консоли совсем не будет? :cry:
Название: Лоадеры - как оно внутри устроено?
Отправлено: kleptos от 14 сентября 2007 23:50:21
Консоль будет.
Собсно у себя  линуксе я только консольную версию дёргать и буду.
Используемый язык - python (10 мег установить один раз), для gui - Tix (расширение tk) выглядет будет не совсем нативно, но это лучше чем wxWidgets, весящие ещё 20 мегабайт.