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


Фотография

Моддинг LCS и VCS (PSP/PS2)


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

#361 HackMan128

HackMan128

    Участник

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


Отправлено 25 June 2011 - 23:31

I'm giving simple ZLib extractor for game.dtz and LVZ files for lcs/vcs team.
http://www.mediafire...sre9b74lu72akes

#362 Lego

Lego

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

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


Отправлено 28 June 2011 - 18:58

Dageron, можешь дать ссылку на структуру TIM2? (особенно интересует конвертирование в BMP и обратно, а то в твоём собщении в середине темы расписано не всё).
хотя нет, вот оно же ^_^

P.S. просто смотрел струкутру TXD файлов PS2 - накидал код, который создаёт дерево из секций RW, теперь интересно экспорнуть картинку в BMP или, хотя бы, в нормальный TM2. потом может статейку накидаю, когда сессию закрою.

Сообщение отредактировал Lego: 28 June 2011 - 23:16


#363 Dageron

Dageron

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

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


Отправлено 29 June 2011 - 03:41

Lego
У меня есть код под Delphi для экспорта любого графического сегмента PS2 и в *.bmp, и в *.tm2. Это процедуры, для работы которых нужно знать соответствующие параметры конкретной текстуры. Выписка из моего Console.Graphics.Core.pas (первая процедура - для отрисовки текстур, экспорт в *.bmp реализован в ней самой, вторая процедура - для экспорта в *.tm2):
procedure DrawImage(globalpath: string; WorkMode: string; iWidth, iHeight, iBPP, iOffset, iMipMaps: integer; SwizzleMode, AlphaMode:boolean; var Image:TImage);
procedure ExportTM2(globalpath, exportpath: string; WorkMode: string; iWidth, iHeight, iBPP, iOffset, iMipMaps: integer; SwizzleMode:boolean);
Я писал их для универсального использования при разборе любых PS2-игр.

Расшифровка параметров:
globalpath - путь к файлу, в котором находится текстура.
WorkMode - режим работы, 'PSP' или 'PS2' (в данном случае 'PS2').
iWidth, iHeight - параметры высоты и ширины.
iBPP - параметр BPP (4 или 8, другие не поддерживаются).
iOffset - оффсет текстуры в файле.
iMipMaps - количество mipmaps (тут могут быть недоработки, но стандартные ситуации проработаны).
SwizzleMode - есть ли swizzling.

В каждой конкретной игре их приходится узнавать по-разному, в данном случае с *.txd - если ты их можешь определить, то теоретически реализовать просмотр и экспортирование можно очень легко. Одна лишь трудность может возникнуть - в PS2 *.txd, насколько я помню, палитра может идти не стандартно "сразу за графическим блоком" (так в LCS/VCS и большинстве игр), а как-то по-другому, так что процедуру нужно будет переделывать.

Прочие параметры:
exportpath (только в ExportTM2) - путь для экспорта *.tm2.
AlphaMode (только в DrawImage) - отрисовывать ли в альфа-режиме.
Image (только в DrawImage) - обычная TImage на форме.

Так что в принципе если опишешь все подробно (ну когда освободишься) или выложишь свой код для разбора *.txd на PS2, то можно будет продумать и просмотр, и экспорт, и даже редактирование.

Кстати про структуру *.tm2, есть чуть более расширенные данные, вот выписка из того же Console.Graphics.Core.pas:
type TIM2Header = record
  FileId:Array[0..2] of AnsiChar;
  FormatVersion:AnsiChar;
  FormatId:SmallInt;
  Pictures:SmallInt;
  Padding:Array[0..7] of byte;

  TotalSize:Integer;
  ClutSize:Integer;
  ImageSize:Integer;
  HeaderSize:SmallInt;
  ClutColors:SmallInt;
  PictFormat:byte;
  MipMapTextures:byte;
  ClutType:byte;
  ImageType:byte;
  ImageWidth:SmallInt;
  ImageHeight:SmallInt;

  Unknown_1:Integer;
  Unknown_2:Integer;
  Unknown_3:Integer;
  Unknown_4:Integer;
  Unknown_5:Integer;
  Unknown_6:Integer;
end;
Еще есть написанная процедура записи заголовка *.tm2 исходя из параметров текстуры, она вызывается внутри процедуры ExportTM2 (о ней писал чуть выше). Реализована для всех стандартных случаев, в LCS/VCS работает отлично, ну в III/VC/SA ничего нестандартного в этом плане тоже быть не должно.
в проекте gtamodding.ru: декабрь 2008 - декабрь 2012

#364 Lego

Lego

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

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


Отправлено 29 June 2011 - 07:45

параметры твоих процедур мне сейчас не сильно помогут, т.к. нет самого содержания функций (процедур), да и мне нужно будет тогда переписать их под плюсы.

код скинуть могу, но он пока под дос, и выводит дерево из struct, text dict, text native и т.д. на экран рекурсивно обходя дерево, что пока не очень интересно.
вообще, я хочу разработать интерфейс, который смог бы экспортировать данные в TIM2, BMP и т.д. (если формат TXD извсетен) или просто в секцию RW, если формат неизвестен, чтобы можно было потом использовать в RW Analyze или просто собрать новый TXD из текстур другого не вдаваясь в формат.

а вот структурка очень интересная (вроде с типами нигде не напутал)
struct TIM2Header {
	char FileId[3];
	char FormatVersion; // имхо лишнее, тк версия получается '0'+version_id. всё-таки это была общая сиигнатура TIM2, как написано у BiDi, да и структура называется TIM2.
	unsigned short FormatId; // тут по сравнению с версией BiDi получились ещё 12 байт O_o а я на его смещения не смотрел. теперь понятно почему там столько нулей ^_^
	unsigned short Pictures;
	unsigned char Padding[8];
	
	unsigned long TotalSize;
	unsigned long ClutSize;
	unsigned long ImageSize;
	unsigned short HeaderSize;
	unsigned short ClutColors;
	unsigned char PictFormat;   // это случаем не bpp? в моей TIM2 картинке это поле равно нулю.
	unsigned char MipMapTextures; // если есть мипмапы, то их нужно самому сгенерировать в конце файла?
	unsigned char ClutType; // интересует ещё это поле, у меня оно равно 0x03
	unsigned char ImageType; // и вот это (0x05)
	unsigned short ImageWidth;
	unsigned short ImageHeight;

	unsigned long Unknown_1;
	unsigned long Unknown_2;
	unsigned long Unknown_3;
	unsigned long Unknown_4;
	unsigned long Unknown_5;
	unsigned long Unknown_6;
};

кстати да, за размер header считать размер этой струкруты минус 16? после заголовка следует изображение, а потом палитра, да?

хм...
untitled.PNG
в чём может быть ошибка?...

Сообщение отредактировал Lego: 29 June 2011 - 10:29


#365 Dageron

Dageron

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

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


Отправлено 29 June 2011 - 14:28

Изображения отображаются неправильно судя по всему потому, что они под swizzling-ом.

Размер header-а всегда (стандартно) равен 48.
PictFormat:=0;  //стандартное значение
MipMapTextures:=1; //многоуровневые я просто не разбирал, да и это не критично
ClutType:=3; //стандартное значение
if iBPP=8 then  ImageType:=5; //стандартно для bpp равного 8 
if iBPP=4 then  ImageType:=4; //стандартно для bpp равного 4
Вообще самый удобный выход из ситуации - если ты на C++ напишешь программу, которая находила бы в *.txd нужные данные (оффсеты, высоту, ширину, bpp), а дальше уже все можно продумать.
в проекте gtamodding.ru: декабрь 2008 - декабрь 2012

#366 Lego

Lego

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

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


Отправлено 29 June 2011 - 16:35

Размер header-а всегда (стандартно) равен 48.

а, ну это и есть sizeof(TIM2Header)-0x10. хорошо.

за описание полей - спасибо. надо бы оформить это на вики.

Вообще самый удобный выход из ситуации - если ты на C++ напишешь программу, которая находила бы в *.txd нужные данные (оффсеты, высоту, ширину, bpp)

так это и есть результат экспорта в .TM2 при помощи моей программы на C++ ^_^. это-то не сложно, а я хотел как раз с графикой поработать. если получится создать BMP - то тогда попробую сделать под винду.
офсеты, разрешения и палитра, кстати, верные, как у steve-m. ну и остальные данные тоже. я пользовался инфой с gtamodding.com, в частности этой.

тогда такой ворос: как определить, есть ли swizzling у конкретной текстуры или нет? (мб значение есть в структуре флажков или на PS2 всегда так?)

я просто думал что swizzling - это фишка TIM2 и для экспорта в TIM2 можно никак не изменять исходное изображение.

Сообщение отредактировал Lego: 29 June 2011 - 16:41


#367 Dageron

Dageron

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

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


Отправлено 29 June 2011 - 17:31

В SanAndreas и ViceCity swizling используется на всех текстурах, а в GTAIII - только на 8 битных (может так, а может нет - не до конца в этом уверен). У steve-m в его программе была ручная смена режима просмотра - либо в режиме swizzling-а, либо без (там эта функция называлась "Enable Filter"). Самое забавное то, что эти флаги я не смог найти и в Stories, так что в Texture Explorer пришлось сделать аналогичный ручной выбор.
в проекте gtamodding.ru: декабрь 2008 - декабрь 2012

#368 Lego

Lego

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

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


Отправлено 29 June 2011 - 18:03

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

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

#369 XEPOMAHT007

XEPOMAHT007

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

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


Отправлено 30 June 2011 - 15:03

Deleted

Сообщение отредактировал XEPOMAHT007: 28 October 2012 - 01:06

a4ea86ab343c.gif
BETA 4.0 COMING SOON


#370 SILENT_Pavel

SILENT_Pavel

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

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


Отправлено 30 June 2011 - 15:28

XEPOMAHT007
Вторая ссылка на медиафайр уже тоже мертва... Точнее я хз в ссылке хакмена тоже самое что по ссылкам твоим?

Сообщение отредактировал SILENT_Pavel: 30 June 2011 - 15:29


#371 XEPOMAHT007

XEPOMAHT007

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

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


Отправлено 01 July 2011 - 18:18

Deleted

Сообщение отредактировал XEPOMAHT007: 28 October 2012 - 01:07

a4ea86ab343c.gif
BETA 4.0 COMING SOON


#372 HackMan128

HackMan128

    Участник

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


Отправлено 02 July 2011 - 07:55

XEPOMAHT007
Вторая ссылка на медиафайр уже тоже мертва... Точнее я хз в ссылке хакмена тоже самое что по ссылкам твоим?

Hey @Silent Pawel, You can find my updates on gtaforums "[WIP] ViceCityStories PC Edition" topic, last pages.

By the way, nice progress is here ;).

#373 solom

solom

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

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


Отправлено 02 July 2011 - 16:56

я мысленно представил одну проблему в редактировании текстур врлдшных. Как понятно, в 3д максе(и в любом 3д редакторе) на объект накладывается текстура с именем, которую вы назвали(эту текстуру). Но при переименовании этой текстуры, на обьекте теряется просмотр текстуры в сцене на модели. Так вот, как пример, рокстары добавляли эти текстуры с опр. именами, которая использует модель. Ну вот вопрос - при замены текстуры в wrldшный .chk и ее сохранения, станет ли модель белой? Я имею ввиду редактирование без таблицы имени текстур в .chk?

Сообщение отредактировал solom: 02 July 2011 - 16:58


#374 HackMan128

HackMan128

    Участник

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


Отправлено 02 July 2011 - 17:21

я мысленно представил одну проблему в редактировании текстур врлдшных. Как понятно, в 3д максе(и в любом 3д редакторе) на объект накладывается текстура с именем, которую вы назвали(эту текстуру). Но при переименовании этой текстуры, на обьекте теряется просмотр текстуры в сцене на модели. Так вот, как пример, рокстары добавляли эти текстуры с опр. именами, которая использует модель. Ну вот вопрос - при замены текстуры в wrldшный .chk и ее сохранения, станет ли модель белой? Я имею ввиду редактирование без таблицы имени текстур в .chk?

I don't think because there are offsets to texture source; 4 bytes before chk parameters header (like size and bpp).
Models must have path to them inside. There is just needed to replace texture source, no headers, because if You replace 64x64 to 128x128, then all ofsets will going wrong.

#375 XEPOMAHT007

XEPOMAHT007

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

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


Отправлено 02 July 2011 - 18:05

Deleted

Сообщение отредактировал XEPOMAHT007: 28 October 2012 - 01:07

a4ea86ab343c.gif
BETA 4.0 COMING SOON


#376 Sergeanur

Sergeanur

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

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


Отправлено 03 July 2011 - 22:27

Нашел в GAME.dtz из GTA VCS PSP оригинальные SDT-файлы по смещению 627652 (0x993C4). Каких либо разделителей я не нашёл, вероятно игра разделяет их проверкой на ноль. Общая длина всех SDT-файлов 93346 байт.

GTA Stories ships in...


#377 XEPOMAHT007

XEPOMAHT007

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

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


Отправлено 06 July 2011 - 17:04

Deleted

Сообщение отредактировал XEPOMAHT007: 28 October 2012 - 01:07

a4ea86ab343c.gif
BETA 4.0 COMING SOON


#378 HackMan128

HackMan128

    Участник

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


Отправлено 06 July 2011 - 21:45

Very nice progress mr. Xepomaht007 :cookie:

#379 XEPOMAHT007

XEPOMAHT007

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

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


Отправлено 07 July 2011 - 13:13

Deleted

Сообщение отредактировал XEPOMAHT007: 28 October 2012 - 01:07

a4ea86ab343c.gif
BETA 4.0 COMING SOON


#380 SILENT_Pavel

SILENT_Pavel

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

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


Отправлено 07 July 2011 - 15:00

Не правда! Крайне интересно! Редактор очень заинтересовал К тому же не раз было доказано, бешанная популярность частенько вредит.

Сообщение отредактировал SILENT_Pavel: 18 September 2012 - 05:26




Ответить



  


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

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