Репутация: 229 
(весьма и весьма положительная личность)
Изучение и моддинг Prince of Persia: Revelations/Rival Swords (WW/T2T)
Данная тема посвящена изучению ресурсов и небольшому моддингу для игр Prince of Persia: Revelations/Rival Swords (Warrior Within/The Two Thrones).
Прежде всего, хотелось бы поблагодарить тех, кто сделал этот моддинг возможным:
ErikPshat - за реверсинг, помощь и модифицированную версию Persian Rug с разблокированными скрытыми фичами.
riku.kh3 - за реверсинг, помощь и полезную утилиту, которая упаковывает ресурсы обратно в .bin
Turfster - автора Persian Rug.
Re-Education - за появление в нужном месте и в нужное время
Итак, начнём
Мод 1 - отключение эффекта свечения при попадании по песочным монстрам в Prince of Persia: Rival Swords/The Two Thrones
Достаточно простой мод, его суть заключается в замене текстур, отвечающими за эффекты на прозрачные. Побочные эффекты - свечение кинжала при QTE и эффект свечения при превращения в тёмного принца тоже отключаются.
Текстуры, отвечающие за это находятся в Prince_Weapons_wow_ff05c7fe.bin
- Prince_Weapons_wow_ff05c7fe_130071D1
- Prince_Weapons_wow_ff05c7fe_1300278D
Достаём их оттуда через Persian Rug -> Bin анализатор -> Извлечь данные.
Структура текстур для PSP - первые 144 байта, и последние 4 байта в конце файла - служебная информация, её не трогаем. С помощью hex-редактора заменяем код текстуры 0x65 байтами для Prince_Weapons_wow_ff05c7fe_130071D1 и 0x00 байтами для Prince_Weapons_wow_ff05c7fe_1300278D.
Структура текстур для PS2 - первые 192 байта, и последние 36 байт в конце файла - служебная информация, её не трогаем. С помощью hex-редактора заменяем код текстуры 0x65 байтами для Prince_Weapons_wow_ff05c7fe_130071D1 и 0x00 байтами для Prince_Weapons_wow_ff05c7fe_1300278D.
Структура текстур для PS3 - первые 68 байт - служебная информация, её не трогаем. С помощью hex-редактора заменяем код текстуры 0x00 байтами.
Структура текстур для GC - первые 76 байт - служебная информация, её не трогаем. С помощью hex-редактора заменяем код текстуры 0x30 байтами. Отдельно ещё хочется упомянуть, что структура образа нестандартная, и придётся доставать бинарник вручную. В моём случае он занимает 188412 байт, и лежит в области 766767600-766956012 (US версия, GKME41).
Структура текстур для Xbox - первые 68 байт - служебная информация, её не трогаем. С помощью hex-редактора заменяем код текстуры 0xFFFFFF00 байтами для Prince_Weapons_wow_ff05c7fe_130071D1 и 0x00 байтами для Prince_Weapons_wow_ff05c7fe_1300278D.
Структура текстур для PC - первые 68 байт - служебная информация, её не трогаем. С помощью hex-редактора заменяем код текстуры 0xFFFFFF00 байтами для Prince_Weapons_wow_ff05c7fe_130071D1 и 0x00 байтами для Prince_Weapons_wow_ff05c7fe_1300278D.
Мод 2 - модифицирование оружия в Prince of Persia: Revelations/Warrior Within
Учитывая, что ранее у меня уже были некоторые заготовки по оружию в виде редактора сэйвов для Revelations/Rival Swords (вот ссылка, если интересует) я решил копнуть это дело глубже. В данном случае - all_weapons_wow_ff0610da.bin, советую распаковать его полностью.
Прежде, чем приступить к разбору конкретных файлов, отвечающих за оружия и их свойства ознакомьтесь со следующим списком:
В списке все коды оружия написаны как есть, когда я писал редактор сэйвов - в обратном порядке, как они отображаются в сэйвах и ресурсах игры, т.е. 41E6 0033 в памяти и названии файлов будет отображаться как 3300 E641. Головную боль ещё добавляет момент, что у разных категорий оружия файлы, отвечающие за их параметры тоже с разным размером, что усложняет разбор их структуры. Поэтому для начала я возьму наиболее похожие по параметрам оружия для изучения.
Этап 1 - перенос специального эффекта с одного оружия на другое
Для этих целей нам подойдут "секретные оружия" - мишка [3EE6 0033] secret (Teddy Bear) и фламинго [42E6 0033] secret (Pink Flamingo). У мишки есть специальный эффект вампиризма, который лечит принца за удары по монстрам, вот мы его и перенесём на фламинго.
Отвечающие за это файлы объектов:
- all_weapons_wow_ff0610da_3300E63E
- all_weapons_wow_ff0610da_3300E642
Сравниваем содержание файлов (например, с пом. Total Commander)
Итак, в начале идёт блок с ID нашего оружия (выделен синим), далее идут указатели:
- 0xF4E50033 и 0xF8E50033 отвечают за 3D модель оружия (выделены серым)
- 0x17E50033 и 0x18E50033 отвечают за ссылку на текстуру оружия (выделены оранжевым)
- 0xC5E60033 и 0xC7E6033 отвечают за ссылку на файл с параметрами оружия (выделены красным), чтобы лишний раз не открывать файл-ссылку уменьшаем значение на 1, т.е. наши файлы с параметрами - all_weapons_wow_ff0610da_3300E6C4 и all_weapons_wow_ff0610da_3300E6C6.
- значение указателя, выделенного чёрным цветом я пока что не знаю.
***Можно заменить все 4 указателя с одного оружия на другое, и в этом случае оно станет аналогом "донора". Заменять указатели частично нельзя, игра не загрузится.***
Теперь, идём сравнивать файлы, отвечающие за свойства оружия:
Опять мы видим вначале блок, теперь он отвечает за ID параметров оружия (выделен синим), далее идёт ID оружия (выделен серым) и наш искомый блок, который отвечает за специальный эффект (выделен красным). Заменяем в файле параметров фламинго 0x01 на 0x03 и получаем фламинго с эффектом вампиризма.
Этап 2 - перенос эффекта неразрушимости (для оружия со специальным эффектом)
Возьмём для этих целей топоры [7BE5 0033] axe (Bahram) и [92E5 0033] axe (Spentas). Первый имеет специальный эффект повышенного урона, но быстро ломается, а второй неразрушимый, но в добавку имеет негативный эффект высасывания здоровья при ударе по монстрам. Файлы, отвечающие за параметры этих топоров:
- all_weapons_wow_ff0610da_3300E59B
- all_weapons_wow_ff0610da_3300E5AF
И смотрим их содержимое:
Нас интересует блок 0x3C9D955B - это специальное значение, которое отвечает за то, что оружие неразрушимо (выделен красным) и блок, 0x00, который отвечает за то, сколько урона получит оружие за каждый удар по монстру (выделен синим). Заменять надо оба, в противном случае оружие будет ломаться.
Этап 3 - перенос эффекта неразрушимости и специального эффекта на обычное оружие (WIP)
Усложняем задачу, и пробуем замоддить обычное оружие. В данном случае я взял [46E6 0033] mace (Vata) и [33E6 0033] sword (Shadee's Sword). В первом случае обычная булава, во втором - неразрушимый меч с негативным специальным эффектом высасывания здоровья при ударе по монстрам. Файлы, отвечающие за параметры для этого оружия:
- all_weapons_wow_ff0610da_3300E657
- all_weapons_wow_ff0610da_3300E6D9
Результаты первого и грубого сравнения:
Блок со специальным значением 0xCFB67969 отвечает за то, что на оружии есть специальный эффект (выделен синим). Далее идёт блок со специальным значением 0x3C9D955B, отвечающим за то, что на оружии есть эффект неразрушимости (выделен красным). Выяснилось, что за специальный эффект отвечает блок в 4 байта - 0x04000000 (выделен серым). Ну и блок 0x00, который активирует неразрушимый эффект (выделен чёрным).
Вроде всё работает, но если приглядеться к блокам в области 184-216, то можно заметить, что блок 0x9A3B0771 присутствует в другом оружии, но он чуть смещен. Как показала практика, блок 0xCFB67969 должен находиться на строго заданной позиции, в противном случае специальный эффект не будет работать. Попробовал подогнать расположение блоков, и методом тыка определил, что следует выбросить блок 0x070A54D6:
Сравнение после подгонки:
Этап 4 - перенос модели и текстуры c одного оружия на другое
Возвращаемся к объектам мишки и фламинго, а конкретнее к указателям на 3d модель оружия - блокам 0xF4E50033 и 0xF8E5033, в данном случае это файлы:
- all_weapons_wow_ff0610da_3300E5F4
- all_weapons_wow_ff0610da_3300E5F8
Открываем и сравниваем:
Первый блок отвечает за [(размер файла) - 12 байт] (выделен синим), далее идёт блок с ID 3d модели оружия (выделен серым). Всё, что после уже отвечает за модель оружия, это мы и будем переносить. Учитывая, что файл с моделью мишки занимает больше фламинго, мы будем переносить модель фламинго на мишку. Разницу в 452 байта заполняем нулями в конце файла.
Проверяем результат (слева то, что получилось, справа оригинал):
Модель мы заменили, а вот текстура осталась старая. Как оказалось, на файл с текстурой ведёт указатель на файл с ссылкой в блоках 0x17E50033 и 0x18E50033 (скриншот сравнения объектов оружия в первом этапе обновлён). Файлы, отвечающие за эти ссылки:
- all_weapons_wow_ff0610da_3300E517
- all_weapons_wow_ff0610da_3300E518
Смотрим, куда же ведут ссылки:
В конце файлов находятся искомые блоки 0x6CE40033 и 0x6DE40033, нам туда. Открываем соответствующие файлы:
- all_weapons_wow_ff0610da_3300E46C
- all_weapons_wow_ff0610da_3300E46D
Смотрим, что у нас внутри:
Вот и наконец-то добрались до текстуры. В первом блоке дважды дублируется ID текстуры (выделен серым), далее идёт блок, отвечающий за правильное наложение текстуры на модель (выделен красным). На 144-м байте начинается текстура, размером 8192 байта. Последние 4 байта в конце файла - служебная информация. Сначала надо заменить блок с параметрами, иначе текстура будет наложена неправильно, идём туда:
Первые 16 байт - размер файла, header magic и ID файла. Их не трогаем, а заменяем всё, что идёт дальше. Далее заменяем содержимое текстуры и проверяем результат (слева то, что получилось, справа оригинал):
архив
Текстура заменилась, но цвет оружия какой-то странный. На данный момент известно, что корни проблемы растут где-то в районе ссылки на текстуру, если в ней заменить ID на текстуру оригинального оружия (0x6CE40033 на 0x6DE40033) то проблема с цветом пропадает.
Первые попытки перенести 3d модель топора из Rival Swords (The Two Thrones) в Revelations (Warrior Within):
Перенести топор оказалось непросто, т.к. у него очень большой размер модели - 3970 байт. По размеру модели подошёл
[31E6 0033] sword (Kaileena's Sword), но у него файл текстуры 4244 байта, а у топора 8340. Пришлось пойти на хитрость, и в ссылке на текстуру заменить ID на текстуру от мишки. Забавно, но после этого топор тоже стал "цветным". Текстуру одного оружия пришлось забить нулями, т.к. итоговый размер стал больше, чем исходный .bin файл
Попробовал использовать ID текстуры фламинго и топор стал розовым
Пробуем ID текстуры от меча Kerena:
Это уже ближе к желаемому результату. Начинают закрадываться подозрения, что где-то ещё есть текстуры поверхности, которые рисуются при определённом ID текстуры.
Rival Swords (The Two Thrones) тоже удалось замоддить:
Попробовал перенести оружие из GameCube версии Warrior Within на The Two Thrones, но увы, текстура из WW ни в какую не хочет нормально вставать на T2T - оружие отображается прозрачным с белой рябью. Видимо, формат текстур изменили.
PS2 версия The Two Thrones пропатчилась нормально:
Сделал небольшое видео и добавил его в заголовок 4-го этапа
Изучение структуры файлов монстров в Prince of Persia: Revelations/Warrior Within (WIP)
После небольшого опыта с моддингом оружия мне захотелось посмотреть, как устроена структуру файлов у монстров. Для начала наведём справки, какой .bin файл за какого монстра отвечает (для этого я посмотрел текстуры PC версии)
Вытягиваем оттуда основной файл-объект:
- ACT_Enemy_Disciple_wow_ff033775_3207CC33 (ACT_Enemies_Disciple.gao)
- ACT_Enemy_Initiate_wow_ff033811_3207CC9B (ACT_Enemies_Initiate.gao)
Теперь посмотрим, чем отличаются файлы:
Итого у нас имеется 6 блоков для рассмотрения:
- 0x07380113 и 0x6CBA0031 отвечают за таблицу, в которой содержится количество объектов "скелета" модели монстра (голова, руки, ноги, и т.д...) (выделены фиолетовым):
Внутри мы видим блок, который отвечает за общее количество объектов "скелета" модели монстра (выделены синим), далее идёт индекс объекта (выделены красным), и какие-то параметры\данные (выделены серым).
- 0xC402001F и 0x66BA0031 отвечают за ссылку на 0xC502001F и 0x67BA0031, таблица, которая содержит ID объектов "скелета" модели монстра (выделены синим):
Объекты в таблице идут в строго-определённом порядке:
4CBA0031 - 3100BA4C >B_Disciple_Yezidi.gao
4DBA0031 - 3100BA4D >B_Disciple_Yezidi Pelvis.gao
4EBA0031 - 3100BA4E >B_Disciple_Yezidi Spine.gao
4FBA0031 - 3100BA4F >B_Disciple_Yezidi Spine1.gao
50BA0031 - 3100BA50 >B_Disciple_Yezidi Neck.gao
51BA0031 - 3100BA51 >B_Disciple_Yezidi Head.gao
53BA0031 - 3100BA53 >B_Disciple_Yezidi L Clavicle.gao
54BA0031 - 3100BA54 >B_Disciple_Yezidi L UpperArm.gao
55BA0031 - 3100BA55 >B_Disciple_Yezidi L Forearm.gao
56BA0031 - 3100BA56 >B_Disciple_Yezidi L Hand.gao
57BA0031 - 3100BA57 >B_Disciple_Yezidi R Clavicle.gao
58BA0031 - 3100BA58 >B_Disciple_Yezidi R UpperArm.gao
59BA0031 - 3100BA59 >B_Disciple_Yezidi R Forearm.gao
5ABA0031 - 3100BA5A >B_Disciple_Yezidi R Hand.gao
5CBA0031 - 3100BA5C >B_Disciple_Yezidi L Thigh.gao
5DBA0031 - 3100BA5D >B_Disciple_Yezidi L Calf.gao
5EBA0031 - 3100BA5E >B_Disciple_Yezidi L Foot.gao
5FBA0031 - 3100BA5F >B_Disciple_Yezidi L Toe0.gao
60BA0031 - 3100BA60 >B_Disciple_Yezidi R Thigh.gao
61BA0031 - 3100BA61 >B_Disciple_Yezidi R Calf.gao
62BA0031 - 3100BA62 >B_Disciple_Yezidi R Foot.gao
63BA0031 - 3100BA63 >B_Disciple_Yezidi R Toe0.gao
5BBA0031 - 3100BA5B >B_Prince_Sword02.gao
28560130 - 30015628 >B_MOD_B_Loincloth_Root.gao
64BA0031 - 3100BA64 >B_MOD_B_Loincloth.gao
27560130 - 30015627 >B_MOD_F_Loincloth_Root.gao
65BA0031 - 3100BA65 >B_MOD_F_Loincloth.gao
26560130 - 30015626 >B_MOD_Head_Flap_Root.gao
52BA0031 - 3100BA52 >B_MOD_Head_Flap.gao
- 0x39СС0732 и 0xA8760113 отвечают за огромную таблицу с ссылками на данные (около 190 ссылок), назначение неизвестно (выделены чёрным). В большинстве случаев данные полностью совпадают, или различаются на несколько байт.
- 0x35CC0732 и 0x98CC0732 отвечают за две ссылки - одинаковый для обоих монстров файл с данными (таблица?) 0x10CC0732, а также 0x34CC0732 и 0x97CC0732, которые отвечают за свойства монстров (выделены красным).
Структура напоминает файл с параметрами меча. Блок 0xFE340113 и 0xFD340113 отвечают за объекты ACT_Enemies_Disciple_Death.gao и ACT_Enemies_Initiate_Death.gao (выделены синим). Блок 0xB3400113 отвечает за объект ACT_SFX_Weapon_Slash.gao (выделен красным). Блок 0xF0720113 отвечает за объект ACT_Enemies_Death_FX.gao (выделен серым). Блок 0x51330113 отвечает за объект ACT_Weapon_Feet.gao (выделен оранжевым). Блоки выделенные фиолетовым предположительно отвечают за AI монстра. На такие мысли меня наводят дебаг сообщения в конце файлов:
AI_strings
ACT_Enemy_Disciple_wow_ff033775_3207CC1A
DISCIPLE:: Unknown Slice Method To Used
ACT_Enemy_Disciple_wow_ff033775_3207CC1C
AI Error: Actor is NOT online
AI Error: Not Done
DISCIPLE:: C_State_Disciple_Move_GoTo ; No Spot to go to
DISCIPLE:: PathFinding {ObstructionLaterOn} - Check if it's worth the trouble to reposition ourselve base on the new path
ACT_Enemy_Disciple_wow_ff033775_3207CC1D
DISCIPLE:: Cinematic is NO Longer Playing
DISCIPLE:: Cinematic InGame Playing
DISCIPLE:: Cinematic InGame Playing
DISCIPLE:: Cinematic Interruption
DISCIPLE:: Cinematic InGame Playing
ACT_Enemy_Disciple_wow_ff033775_3207CC19
AI Error: Not Done
- 0x31CC0732 и 0x99CC0732 отвечают за ссылку на 0x4C230032, одинаковый файл для обоих монстров (выделены чёрным). Назначение неизвестно.
- 0x32CC0732 и 0x9ACC0732 отвечают за ссылку на 0x4E230032, одинаковый файл для обоих монстров (выделены чёрным). Назначение неизвестно.
Не найдя модель и текстуру я решил искать в обратном направлении - зная код текстуры я нашёл второй объект, который отвечает за "тушку" монстра:
- ACT_Enemy_Disciple_wow_ff033775_1F0002C1 (M_Disciple_Body.gao)
- ACT_Enemy_Initiate_wow_ff033811_3100BA4B (M_Initie.gao)
Открываем и сравниваем:
- 0x7F02001F и 0x24BA0031 отвечают за 3d модель монстра (выделены синим).
- 0xEB02001F и 0x1C570130 содержит 7 ссылок, первые 6 из них ведут на основную текстуру, и ещё одна ведёт на одинаковую текстуру для обоих монстров, предположительно отвечающую за эффекты крови (выделены красным). Открываем 0xEF02001F и 0x15570130, достаём оттуда основную текстуру - 0x8703001F и 0x9BB90031.
Далее идёт похожая таблица с объектами "скелета" модели монстра:
Как и в прошлый раз объекты расположены в строгом порядке:
18000000
4DBA0031 - 3100BA4D >B_Disciple_Yezidi Pelvis.gao
01000000
4EBA0031 - 3100BA4E >B_Disciple_Yezidi Spine.gao
02000000
4FBA0031 - 3100BA4F >B_Disciple_Yezidi Spine1.gao
03000000
50BA0031 - 3100BA50 >B_Disciple_Yezidi Neck.gao
04000000
51BA0031 - 3100BA51 >B_Disciple_Yezidi Head.gao
05000000
53BA0031 - 3100BA53 >B_Disciple_Yezidi L Clavicle.gao
06000000
54BA0031 - 3100BA54 >B_Disciple_Yezidi L UpperArm.gao
07000000
55BA0031 - 3100BA55 >B_Disciple_Yezidi L Forearm.gao
08000000
56BA0031 - 3100BA56 >B_Disciple_Yezidi L Hand.gao
09000000
57BA0031 - 3100BA57 >B_Disciple_Yezidi R Clavicle.gao
0A000000
58BA0031 - 3100BA58 >B_Disciple_Yezidi R UpperArm.gao
0B000000
59BA0031 - 3100BA59 >B_Disciple_Yezidi R Forearm.gao
0C000000
5ABA0031 - 3100BA5A >B_Disciple_Yezidi R Hand.gao
0D000000
5CBA0031 - 3100BA5C >B_Disciple_Yezidi L Thigh.gao
0E000000
5DBA0031 - 3100BA5D >B_Disciple_Yezidi L Calf.gao
0F000000
5EBA0031 - 3100BA5E >B_Disciple_Yezidi L Foot.gao
10000000
5FBA0031 - 3100BA5F >B_Disciple_Yezidi L Toe0.gao
11000000
60BA0031 - 3100BA60 >B_Disciple_Yezidi R Thigh.gao
12000000
61BA0031 - 3100BA61 >B_Disciple_Yezidi R Calf.gao
13000000
62BA0031 - 3100BA62 >B_Disciple_Yezidi R Foot.gao
14000000
63BA0031 - 3100BA63 >B_Disciple_Yezidi R Toe0.gao
15000000
64BA0031 - 3100BA64 >B_MOD_B_Loincloth.gao
18000000
65BA0031 - 3100BA65 >B_MOD_B_Loincloth_Root.gao
1A000000
52BA0031 - 3100BA52 >B_MOD_Head_Flap.gao
1C000000
FFFFFFFF
И последняя таблица, которая отвечает за объекты со спец. эффектами (кровь при попадании, дезинтеграция монстра после сметри, и т.д..)
Для обоих монстров таблица одинаковая (байты были перевёрнуты обратно для удобства поиска объектов через Persian Rug).
Мои первые попытки перенести модель и текстуру монстра Initiate (Executor) на Disciple (Raider) напоминают историю с мишкой и зелёным топором (слева то, что получилось, справа оригинал):
Upd: разобрался с текстурой, оказалось что я проворонил блок с параметрами, который отвечает за правильное наложение текстуры. Обновил скриншот в этапе переноса модели с текстурой оружия, и добавил описание. Также обновил описание блоков с объектами - это оказались объекты "скелета" модели монстра, последние сомнения по поводу их назначения развеяли попытки перенести модель монстра из Rival Swords (The Two Thrones) в Revelations (Warrior Within) и наоборот:
Мод 3 - модифицирование монстров в Prince of Persia: Revelations/Warrior Within (WIP)
Продолжение следует...
Буду наполнять тему по мере нахождения новой инфы
Последний раз редактировалось ErikPshat; 12.08.2024 в 22:27.