Перейти к содержимому


Фотография

[WIP] TXD_2048 v0.2


Сообщений в теме: 87

#1 Lego

Lego

    Активный участник

  • Пользователи
  • PipPipPip
  • 343 сообщений
  • Пол:Не определился


Отправлено 03 August 2011 - 10:19

TXD_2048 - редатор текстурных ресурсов (TXD есть сокращение от TeXture Dictioanary) игр на движке RenderWare для игровой консоли Sony PlayStation 2. Написан на C++. Название TXD_2048 произошло от размера сектора DVD-диска (2 кб или 2048 байт), на которых выходят PS2-игры. Вроде как это название очень тонко намекает на PS2.
Под редактированием подразумеваются следующие основные действия, над которыми идёт основная работа:
  • импорт
  • экспорт
  • замена
  • переименовывание
  • удаление
Также планируются некоторые второстепенные действия:
  • (TODO) смена версии ресурса RenderWare.
  • (BUGGY) попытка оптимизации (максимального сжатия текстуры без потери данных за счёт удаления пустых секций и ненужных байтов строках. пока не проверял).
  • (TODO) конвертация в несжатый ПК-формат GTA San Andreas.
  • (TODO) редактирование неизвестных флажков, например "Sky MipMap Value".
  • (TODO) быстрая смена "заготовок" структур для неизвестных полей (сейчас это 80+80 байт в структуре самой текстуры и часть структуры, в которой определены длина и ширина)
Для работы используются три фрмата:
  • .BMP - обычный Windows Bitmap, 4bpp, 8bpp (16bpp пока не поддерживается, так как формат самый неудобный, а его на PS2 я не встречал, для рендера используется 24bpp и 32bpp)
  • .TM2 - Формат графики PlayStation 2, было бы странно не включить его поддержку. Для работы с этим форматом есть удобный плагин для фотошопа.
  • .RWSECT - Секция RenderWare, не что иное, как секция TextureNative (PS2) вместе с заголовком. Позволяет "хоть как-то" работать с текстурами неизвестного формата и экспортировать данные для более удобного рассмтрения в HEX-радакторе.
Платформы и игры, которые должны поддерживаться:
  • PS2:
    • GTA San Andreas
    • GTA Vice City
    • GTA III
    • Manhunt
    • Bully
    • Max Payne II (вроде как формат 1:1 идентичен GTA SA)
  • PC (только просмотр, экспорт и конвертация в несжатый формат, а также конвертация из этих форматов в формат PS2):
    • GTA San Andreas PC
    • GTA Vice City PC
    • GTA III PC
    • Manhunt PC *
  • XBOX (аналогично PC):
    • GTA San Andreas XBOX *
    • GTA Vice City XBOX
    • GTA III XBOX
  • PS2/PSP Stories (просмотр, экспорт и конвертация в PC/PS2-совместимый формат):
    • GTA Liberty City Stories PSP / PS2 *
    • GTA Vice City Stories PSP / PS2 *
* - эти игры могут поддерживаться не полностью, но программа тестируется и на их ресурсах.
игры, выделенные полужирным поддерживаются "официально", а значит в спорных вопросах буду ориентироваться на структуру именно этих игр.


Изображение Изображение Изображение Изображение

Последний публичный билд - 437.
Скачать бесплатно без смс без регистрации

Страничка программы будет здесь: gta.nick7.com/txd_2048.

Предполагаемые системные требования:
- Windows XP SP2 и выше (VS 2010, такие дела. а 2008-ю лень ставить.)
- Желательно более 256 цветов на дисплее, а так пока всё.
- 100КБ - 2 МБ свободного места на жёстком диске.

Внимание!
- если вы нашли какой-то "нестандартный" TXD файл от GTA, Bully или Manhunt (первая часть) то скиньте его мне.

Сообщение отредактировал Lego: 02 July 2012 - 21:07


#2 N69

N69

    Участник

  • Пользователи
  • PipPip
  • 26 сообщений
  • Пол:Мужчина

Отправлено 03 August 2011 - 11:04

Будет-ли в программе поддержка игры Sonic Heroes? Вот TXD файл.

Прикрепленные изображения

  • 10.JPG

Прикрепленные файлы


Сообщение отредактировал Rom96: 03 August 2011 - 11:18


#3 Lego

Lego

    Активный участник

  • Пользователи
  • PipPipPip
  • 343 сообщений
  • Пол:Не определился


Отправлено 03 August 2011 - 11:21

да, файл открывается - RW 3.5.0.0 (0x1400FFFF), все текстуры 4битные, думаю, будет работать, нужно просто разобраться с 4-битным swizzling'ом. (именно swizzling, а не UNswizzling)

Сообщение отредактировал Lego: 03 August 2011 - 12:42


#4 SILENT_Pavel

SILENT_Pavel

    Активный участник

  • Пользователи
  • PipPipPip
  • 937 сообщений


Отправлено 03 August 2011 - 11:53

Lego
А TXD из Silent hill Origins ps2 версии откроет? там тоже такие контейнеры текстур, если распаковать ARC архивы вроде. Вообще идея здоровская. :)

#5 Lego

Lego

    Активный участник

  • Пользователи
  • PipPipPip
  • 343 сообщений
  • Пол:Не определился


Отправлено 03 August 2011 - 12:25

SILENT_Pavel, не знаю. главная задача - трилогия GTA. скинь TXD (или файл с TXD) я посмотрю.

если архивы принципиально отичаются, то я вряд ли буду писать код под эту игру.

если TXD открываются прогой от steve-m, то с вероятностью 99% должно и у меня открываться.

я бы хотел открыть ещё Warriors, но не знаю структуру их архива.

Сообщение отредактировал Lego: 03 August 2011 - 12:28


#6 Dageron

Dageron

    Активный участник

  • Пользователи
  • PipPipPip
  • 1130 сообщений
  • Пол:Мужчина
  • Город:Пермь


Отправлено 03 August 2011 - 17:12

Ну что, как с 4bpp дела? Если мой код swizzling-а под Delphi не удалось использовать, то могу дать C#-аналог, его под C++ переписать попроще будет. Версия ресурса RenderWare в играх от R* везде одинаковая или нет?
в проекте gtamodding.ru: декабрь 2008 - декабрь 2012

#7 Lego

Lego

    Активный участник

  • Пользователи
  • PipPipPip
  • 343 сообщений
  • Пол:Не определился


Отправлено 03 August 2011 - 18:22

> Версия ресурса RenderWare в играх от R* везде одинаковая или нет? версия аналогична компьютерной (условно RW Version PC = RW Version PS2) где-то месяц назад, ещё до того как я уезжал, я исследовал поле структры, 64байта размером (не знаю как его уж описать) и пытался выделить похожие биты в 4битных текстурах без swizzling'а и отличия от текстур со swizzling'ом. по-видимому, условие использование swizzling'а сделано сложнее чем просто битовая маска. в любом случае я ещё посмотрю и поэксперементирую с текстурами. даже если не получится точно выявить условие, то сделаю что-то типа SmartSwizzling :) которая будет использовать как раз версию RW. > Ну что, как с 4bpp дела? Если мой код swizzling-а под Delphi не удалось использовать, то могу дать C#-аналог, его под C++ переписать попроще будет. толком ничего не делал, на мне сейчас практически два проекта, но код твой посмотрел. я даже удивился размеру твоей функции. если честно, думал будет попроще для 4бит. а ведь нужно сделать ещё и обратные функции.

#8 SILENT_Pavel

SILENT_Pavel

    Активный участник

  • Пользователи
  • PipPipPip
  • 937 сообщений


Отправлено 03 August 2011 - 20:49

я бы хотел открыть ещё Warriors, но не знаю структуру их архива.

Я их разбирал их через плагин, написанный для Xpert2 (на форуме выкладывал) - только внутри все файлы не определены, плагин очень серый, все файлы настоящие, но их расширение и имена стандартные вида data.dat - по заголовкам хекс надо как-то смотреть их формат и вручную менять и открывать.

Например у звуковых файло пс2 AT3 в заголовке файла есть слово RIFF если просматривать через хекс и остальные подобные, разбирал псп архив вроде.

txd файлы оригинса скину позже

Сообщение отредактировал SILENT_Pavel: 03 August 2011 - 20:53


#9 Dageron

Dageron

    Активный участник

  • Пользователи
  • PipPipPip
  • 1130 сообщений
  • Пол:Мужчина
  • Город:Пермь


Отправлено 04 August 2011 - 06:10

Lego

версия аналогична компьютерной (условно RW Version PC = RW Version PS2)

А в Bully и Manhunt другая версия или все та же, как в III/VC/SA?

где-то месяц назад, ещё до того как я уезжал, я исследовал поле структры, 64байта размером (не знаю как его уж описать) и пытался выделить похожие биты в 4битных текстурах без swizzling'а и отличия от текстур со swizzling'ом.
по-видимому, условие использование swizzling'а сделано сложнее чем просто битовая маска. в любом случае я ещё посмотрю и поэксперементирую с текстурами.

Обычно параметр swizzled (tiled) занимает один лишь бит, другое дело этот бит найти :) .

толком ничего не делал, на мне сейчас практически два проекта, но код твой посмотрел. я даже удивился размеру твоей функции. если честно, думал будет попроще для 4бит. а ведь нужно сделать ещё и обратные функции

Обратная функция есть у меня на Delphi, если что, то скину потом. Также отыскал код на C#, но там только unswizzling. Скачать можешь с pastebin.
в проекте gtamodding.ru: декабрь 2008 - декабрь 2012

#10 XEPOMAHT007

XEPOMAHT007

    Активный участник

  • LCSTeam
  • PipPipPip
  • 472 сообщений
  • Пол:Мужчина


Отправлено 04 August 2011 - 08:01

TXD_2048 - редатор текстурных ресурсов (TXD есть сокращение от TeXture Dictioanary) игр на движке RenderWare для игровой консоли Sony PlayStation 2. Название TXD_2048 произошло от размера сектора DVD-диска (2 кб или 2048 байт), на которых выходят PS2-игры. Вроде как это название очень тонко намекает на PS2.


Очень странное название, намекает на любые ресурсы, оптимизированные под чтение с CD/DVD, т.е. блоками по 2 килобайта - при чём тут твоя программа - непонятно.

Кстати, поддержка RW4 будет (т.е. TEX-формат GTA LCS, GTA VCS, Manhunt2 и ещё кое каких игр на PS2)?

Сообщение отредактировал XEPOMAHT007: 04 August 2011 - 08:04

a4ea86ab343c.gif
BETA 4.0 COMING SOON


#11 Lego

Lego

    Активный участник

  • Пользователи
  • PipPipPip
  • 343 сообщений
  • Пол:Не определился


Отправлено 04 August 2011 - 12:13

> Обычно параметр swizzled (tiled) занимает один лишь бит, другое дело этот бит найти.
это если предположить что swizzling это константная операция, то да. а возможно... к примеру, что там указан размер блоков для swizzling'а и при нуле он или не работает или по умолчанию.

> намекает на любые ресурсы, оптимизированные под чтение с CD/DVD, т.е. блоками по 2 килобайта - при чём тут твоя программа - непонятно.
ты забыл про "TXD", TXD и 2048 намекают скорее под TXD записанные на DVD. собственно это не важно, как её назвать.

> Кстати, поддержка RW4 будет
сейчас у меня нет описания их формата, я даже не представляю насколько он отличается. и вообще, разве в чём-то кроме названия это RW? в TEX вообще не структуировано всё по-моему, как в RW3.
теоретически, если удастся написать интерфейс (класс), аналогичный тому, что я написал для ps2 txd, то почему бы и нет?

> А в Bully и Manhunt другая версия или все та же, как в III/VC/SA?
0x0003FFFF = Unknown RW 3.0.0.3
0x00000310 = GTA III
0x0800FFFF = GTA III
0x0C02FFFF = GTA Vice City
0x1003FFFF = GTA Vice City
0x1005FFFF = Manhunt
0x1400FFFF = Unknown RW 3.5.0.0
0x1C02000A = Bully
0x1803FFFF = GTA San Andreas
на PC именно сама игра определяется по значению поля структуры для каждой текстуры.
на ps2 у всех текстур там сигнатура "PS2".

Сообщение отредактировал Lego: 04 August 2011 - 12:19


#12 XEPOMAHT007

XEPOMAHT007

    Активный участник

  • LCSTeam
  • PipPipPip
  • 472 сообщений
  • Пол:Мужчина


Отправлено 04 August 2011 - 12:26

теоретически, если удастся написать интерфейс (класс), аналогичный тому, что я написал для ps2 txd, то почему бы и нет?


А у меня наоборот, написано 3 специализированных и один универсальный алгоритмы чтения TEX, но как раз не хватает кода отображения текстуры в форме программы или преобразования её в другой формат. И исходников нигде нету, примеров, близких по чтению текстур с PS2 я тоже нигде не нашёл. Можешь скинуть алгоритм чтения текстуры с палитрой, если не сложно?

Сообщение отредактировал XEPOMAHT007: 04 August 2011 - 12:28

a4ea86ab343c.gif
BETA 4.0 COMING SOON


#13 Lego

Lego

    Активный участник

  • Пользователи
  • PipPipPip
  • 343 сообщений
  • Пол:Не определился


Отправлено 04 August 2011 - 12:32

в смысле преобрахование из TM2 в BMP?

#14 solom

solom

    Активный участник

  • Пользователи
  • PipPipPip
  • 267 сообщений
  • Пол:Мужчина


Отправлено 04 August 2011 - 13:00

в смысле преобрахование из TM2 в BMP?

Мне кажется, он имеет ввиду конверт из TM2 в .BMP формат.

#15 XEPOMAHT007

XEPOMAHT007

    Активный участник

  • LCSTeam
  • PipPipPip
  • 472 сообщений
  • Пол:Мужчина


Отправлено 04 August 2011 - 13:12

в смысле преобрахование из TM2 в BMP?


просмотр в форме любых текстур из GTA PS2 (модифицированный TM2, по крайней мере в сториесах) либо конвертирование в любой PC-формат. К сожалению нигде никакой документации или примерного описания никто не выкладывал. Из-за чего я пока не могу доделать свою программу для работы с WRLD LCS.

a4ea86ab343c.gif
BETA 4.0 COMING SOON


#16 Lego

Lego

    Активный участник

  • Пользователи
  • PipPipPip
  • 343 сообщений
  • Пол:Не определился


Отправлено 04 August 2011 - 13:26

лучше напиши мне в ICQ а тот мы по одному сабжу будем месяц общаться - я ж не знаю что у тебя есть и какие данные ты можешь вытащить из TEX. коротко говоря нужно вытащить растр и палитру, bpp, длину и ширину. всё. предположим, что ты их вытащил. ну а если есть массив цветов палитры и самого растра, то проще всего - это собрать TIM2 (нужен просто заголовок). и для TM2 есть плагин для фотошопа. отрендерить такой формат не получится, но импорт-экспорт сделать вполне реально. если хочешь отрендерить в проге - собирай, например, BMP. на самом деле всё что нужно это пересобрать - это заголовок файла (довольно просто) и заголовок информации DIB (устройство-независимый битмап). инфа про битмап расписана на википедии, на MSDN и могу ссылку подкинуть ещё. далее нужно преобразовать палитру из RGB в BGR и поменять каждый второй и третий блок из 8 цветов в блоках по 32 цвета. или же сразу собирай 24-битный битмап без палитры, я для рендера использую хэндл 24-битного битмапа (для режима текстура+альфа хэндл 32-битного). > Можешь скинуть алгоритм чтения текстуры с палитрой, если не сложно? я просто тебя плохо понимаю, так как чтение у меня организуется стандартным методом std::ifstream.read( dest, size ) а палитра и растр тупо (по крайней мере у меня на PS2 TXD) лежат сразу в готовом TM2 формате. нужно знать только смещение. ну в самом деле, тебя же, наверное, не это интересует?

Сообщение отредактировал Lego: 04 August 2011 - 13:36


#17 XEPOMAHT007

XEPOMAHT007

    Активный участник

  • LCSTeam
  • PipPipPip
  • 472 сообщений
  • Пол:Мужчина


Отправлено 04 August 2011 - 13:41

Все тамошние текстуры находятся под свизилингом, преобразование в TM2 простым дописыванием заголовка не подходит. Из TEX/WRLD извлекаются в память все нееобходимые данные для чтения текстуры, но как оно читается, я не знаю. В сториесах какой-то TM2-подобный алгоритм вывода текстур, если бы как-нибудь узнать, как сформировать изображение из растра и палитры для текстур в старых версиях RW (то бишь так как у тебя), то можно переделать его под RW4.

a4ea86ab343c.gif
BETA 4.0 COMING SOON


#18 Lego

Lego

    Активный участник

  • Пользователи
  • PipPipPip
  • 343 сообщений
  • Пол:Не определился


Отправлено 04 August 2011 - 13:54

> Все тамошние текстуры находятся под свизилингом, преобразование в TM2 простым дописыванием заголовка не подходит.
так и у меня под swizzling'ом кроме некоторых случаев gta3 (с 4битами я сейчас и туплю)
для 8-битных текстур я использую этот код unswizzling'а.
в остальном всё то же самое. просто собираешь заголовок ( инфу по нему я вроде на вики скидывал) и сохраняешь в файл: заголовок, заголовок текстуры, растр и палитру. всё.
что именно тебе не понятно? какой момент?


кажется тебя интересуют функции типа
int ps2_bitmap::add_image( const long width, const long height, const long bpp, const char* rs, const char* palette, int unswizzle, int flip, int alpha_mode );
HBITMAP ps2_bitmap::get_bitmap_handle( long bpp );
первая получает ресурс в виде адресов и значений напрямую из класса, отвечающего за PS2 TXD, а вторая возвращает хэндл, который можно отрендерить на форме/


P.S. мне вот интересно, может по такому подобию написать свой код unswizzle4? слишком сложные коды которые вы кидаете, памяти для перестановки пикселей ну никак не может требоваться в 4 раза больше, чем в оригинале.

Сообщение отредактировал Lego: 04 August 2011 - 14:02


#19 XEPOMAHT007

XEPOMAHT007

    Активный участник

  • LCSTeam
  • PipPipPip
  • 472 сообщений
  • Пол:Мужчина


Отправлено 04 August 2011 - 14:19

> Все тамошние текстуры находятся под свизилингом, преобразование в TM2 простым дописыванием заголовка не подходит.
так и у меня под swizzling'ом кроме некоторых случаев gta3 (с 4битами я сейчас и туплю)
для 8-битных текстур я использую этот код unswizzling'а.
в остальном всё то же самое. просто собираешь заголовок ( инфу по нему я вроде на вики скидывал) и сохраняешь в файл: заголовок, заголовок текстуры, растр и палитру. всё.
что именно тебе не понятно? какой момент?


Не понятно, что с этим дальше делать - любой просмотрщик TM2 это читать отказывается (пишет плохой формат и всё в таком духе...)

кажется тебя интересуют функции типа

int ps2_bitmap::add_image( const long width, const long height, const long bpp, const char* rs, const char* palette, int unswizzle, int flip, int alpha_mode );
HBITMAP ps2_bitmap::get_bitmap_handle( long bpp );
первая получает ресурс в виде адресов и значений напрямую из класса, отвечающего за PS2 TXD, а вторая возвращает хэндл, который можно отрендерить на форме/


Не понимаю, что это такое? У меня просто считывается из сгенерированной таблицы определённое тело текстуры, палитра со свизилингом в память, от туда мне нужно её как то вывести на экран или преобразовать в bmp. Пока что работает только конвертирование WRLD в TEX и обратно.

a4ea86ab343c.gif
BETA 4.0 COMING SOON


#20 Lego

Lego

    Активный участник

  • Пользователи
  • PipPipPip
  • 343 сообщений
  • Пол:Не определился


Отправлено 04 August 2011 - 14:31

> Не понятно, что с этим дальше делать - любой просмотрщик TM2 это читать отказывается (пишет плохой формат и всё в таком духе...)
чувак, swizzling это операция с растром. в определённом порядке меняет индексы (пиксели) местами. неверный формат только потому что ты неверно работаешь с ресурсами сам.
даже если ты не воспользуешься unswizzling'ом ты получишь картинку, только она будет вся как будто размазанная. я сам с этого начинал месяц назад, когда писал первую версию этой программы.

> Не понимаю, что это такое?
я привёл прототипы функций и краткое описание чё они делают.

структура TM2 расписана мной тут: http://gtamodding.ru/wiki/TIM2.
по этой структуре я сам формирую TM2 который открывается ^_^

исходник моего класса TM2 на паблик выкладывать пока не буду - просто он довольно "грязный" - лучше попозже распишу работу с TM2 и PS2 архивами на вики.

(XEPOMAHT007, если хочешь я могу тебе скинуть нужные тебе исходники - пиши насчёт этого в аську, на крайняк в личку. до релиза на паблик всё равно выкладывать не буду.)

Сообщение отредактировал Lego: 04 August 2011 - 14:37




Ответить



  


Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 анонимных