Успокойтесь вы, ну что за спор?)
Видно как раз яркий случай того, что тридцать страниц разговоров, - и никакого конструктивного консенсуса.
таким типом структуры, которым описано например weapons data, описать весь DTZ очень сложно. Да, огрызки ресурсов (а каждый ресурс в DTZ представлен множеством вложенных друг в друга таблиц в иерархическом порядке) так представлять можно, но что-то модифицировать в ней так просто не получится - отредактировав одну таблицу, без редактирования оставшихся связанных с ней успехов не принесёт. Сториесы сделаны по-консольному, а вы их пытаетесь воспринимать как будто они мультиплатформенные.
На самом деле там все не совсем так. В *.dtz/*.lvz использовались многоуровневые C++ шаблоны (не путать с 010 "шаблонами", где таких шаблонов как раз и нет) и коллекции, которые можно использовать где угодно (хоть на консолях, хоть на ПК); ибо их основное назначение - экономия памяти, ускорение загрузки и сохранения. Это мощное ООП, которое можно реализовать только в C++ (в Delphi, правда, тоже можно, но с заметными нетривиальными манипуляциями). Изначально загрузка "ресурса" занимает всего пару строк, а при сохранении компилятор сам (грубо говоря) "раскладывет все структуры внутри файла" (в исходниках предусматривалось, что структуры ссылаются друг на друга; при сохранении, соответственно, указатели заменяются смещениями и т.д).
Если смотреть на то, как компилятор их разложил, как раз и получится "множество вложенных друг в друга таблиц", ссылающиеся друг на друга структуры и ряд прочих моментов, затрудняющих изучение файла опытным путем через hex.
Отсюда следует два варианта.
Вариант первый. Постараться расписать все структуры так, как они выглядели в оригинале, использовать многоуровневые шаблоны. Тогда действительно и загрузка будет занимать пару строк, и сохранение (так что не только пересборку можно будет делать, но и свое что-то новое добавлять). Но самый большой нюанс - для этого game.dtz должен быть разобран
досконально, т.е. не по фрагментам, а именно иерархией классов и структур один-в-один как было у R*. Сделать это, так скажем, непросто.
Вариант второй. Добираться до нужных данных внутри *.dtz/*.lvz опытным путем, запомнить оффсеты основных структур и прочего содержимого. Работать с этим содержимым в определенных рамках (например, в пределах размера всего оригинального).
Оба варианта целесообразны в разных ситуациях, все зависит от поставленной задачи.
Моей задачей было создать условия для локализации, поэтому и работать приходилось только в определенных направлениях, следуя второму пути.
Задача
XEPOMAHT007, очевидно, извлечь максимум с консолей чтобы перенести Stories на ПК. Тут конечно был бы больше рационален первый путь, но, во-первых, действовать в его рамках очень непросто, и, во-вторых, тогда надо вообще весь подход к переносу Stories на ПК кардинально менять. Вот и приходится пробиваться через hex по всем перекликающимся таблицам внутри *.img/*.lvz практически вручную.
Есть и другая задача - создать некую площадку для моддинга, пусть даже небольшого. Поменять weapondata, handling и переделать пару текстур - согласитесь, многим всегда приятно. Только вот надо ли для этого тратить силы и время, досконально разбирать game.dtz? Очевидно, нет.
Вывод напрашивается один, - чтобы что-то сдвинулось в плане создания площадки под моддинг, надо выкладывать наработки и описания. Пусть неоконченные, но чтобы был общий источник информации. Об этом и я, и
SILENT_Pavel, писали уже неоднократно (и, что самое интересное,
Lego тоже это же самое уже
не в первый раз повторяет).
Вот, скажем, описания timecyc у меня нет, а у
XEPOMAHT007 и его команды есть, но когда и я, и
SILENT_Pavel спрашивали (
тут и
тут) про timecyc, это было проигнорировано. Когда в 2010 я разобрал текстуры внутри game.dtz и разрабатывались первые версии Texture Explorer-а, почему-то делился даже непубличными build-ами (не говоря уже о том, как удалось в 2009 и про zlib все понять, и откопать запакованные menu/fonts, что пригодилось всем интересовавшимся), так что же сейчас?
Оффсеты структур и сами структуры, которые расписаны у меня, конечно постепенно буду выкладывать.
Раз начали говорить про handling - начну с него, VCS и LCS (там они, кстати, разные).
Сейчас доведу до ума редактор, чтобы была хоть полноценная программа для работы с параметрами автотранспорта.
Будет программа - будет проще поэкспериментировать и расписать неизвестные поля.
И на самом деле
Lego прав по поводу того, что нет смысла указывать в статье программы, которые есть только у авторов (и почти наверняка еще и сильно недоработаны), с таким же успехом можно было бы указать какой-нибудь абстрактный "R* SDK". А вот на счет имен имен не соглашусь - раз имен файлов нет, то для большего понимания они как раз нужны (menu.chk/fonts.chk как было в первой версии DTZ Editor и т.д.).
оффсеты на все ресурсы в DTZ свалены в одну большую таблицу, которую я называю глобалсекцией (она есть во всех файлах)
Эта таблица не является специфической для DTZ. Я повторю, что она присутствует во ВСЕХ файлах сториесов
Если это та таблица про которую я подумал (у aru в исходниках GTA Stories Texture Viewer она называлась relocation table), то предназначается она для для распределения памяти. Так, в *.chk/*.xtx некоторые содержащиеся в этой таблице оффсеты ведут на начало графики, поля width/height и тому подобные; в *.dtz (и *.wrld) - на другие таблицы и на конкретные части этих таблиц.