Создание лиц персонажей. Часть 2В первой части статьи уже упоминалось о том, что координаты глаз и губ тактических портретов рпц-персонажей и чаров жестко «зашиты» в движке игры и говорилось о том, что если вы хотите их корректного отображения в интерфейсе, то необходимо создавать портреты своих персонажей с учетом приведенных таблиц смещений. Однако, это не всегда бывает возможно, в тех случаях, когда координаты глаз и губ получаются меньше табличных, такой способ непригоден. Есть еще два способа:
- прямая правка таблиц координат в HEX-коде экзешника;
- внесение координатных поправок в Sti-файл портрета.
Все эти способы имеет смысл применять в том случае, если создается мод на базе уже готового движка, а не его компиляцией из исходников, в последнем случае проще поправить таблицы прямо в исходниках, еще лучше — вынести их из движка в отдельный ресурсный файл.
Правка координат портретов RPC и чаров в HEX-коде движка
Раз координаты смещений глаз и губ персов прописаны в сорцах, соответственно их значения «прошиваются» в исполняемый файл движка, надо только найти смещения, по которым они там находятся, и поправить их в hex-редакторе на нужные. В разных версиях игры эти смещения различны, поэтому имеет смысл искать их по значению в той конкретной версии, на которой делается мод. Например, вы сделали новый портрет RPC-57 — 57.sti (бывший Мигель), у которого значения координат глаз и губ получились соответственно: 10, 5, 7, 20. Далее делаете следующее:
- В таблице рпц-персонажей находите исходные значения координат глаз и губ Мигеля:
9, 8, 8, 24
- переводите их в шестнадцатиричный вид:
09 08 08 18
- грузите в hex-редактор файл ja2.exe и ищите в нем эту подстроку
- заменяете найденые значения на те, которые вам нужны, естественно в шестнадцатеричном виде:
0A 05 07 14
Так поступаете со всеми вновь созданными реписями.
С чарами сложнее, порядок поиска исходных зачений координат для них иной. Координаты их глаз и губ в исходниках прописаны не в одной, а в четырех (полный дурдом!) таблицах, поэтому их hex-последовательность в экзешнике другая, а имено:
- X-координаты глаз
- Y-координаты глаз
- X-координаты губ
- Y-координаты губ
На каждый тип координат отводится 32 байта (по два на одно значение). Именно в такой последовательности их и надо искать в движке и, прежде всего, локализовать смещение, по которому находятся начало значений координат для портретов чаров. Для этого ищется следующая подстрока, соответствующая началу таблицы X-координаты глаз:
08 00 09 00 08 00 06 00 0D 00 0B
Далее, отсчитываете от начала искомое исходное значение соответсвующей координаты и заменяете его на нужное. В принципе, ничего сложного в такой правке hex-кодов нет, но, на всякий случай, сделайте копию файла ja2.exe, перед ее началом. Если умеете писать патчи, то определив соответствующие смещения для всех координат, прописываете их новые значения в патч, для авто-правки экзешника.
Внесение координатных поправок в sti-файл портрета
Давно собирался проверить, понимает ли движок координаты глаз и губ, прописанные непосредственно в sti-файле портрета. Наконец сподобился и проверил, оказалось — понимает, что дает возможность прописывать нужные координаты прямо в стишку, без правки экзешника. Этот способ менее радикальный, чем прямая правка hex-кода или сорцов, но зато более гибкий и быстрый.
В sti-файл прописываются не реальные координаты, определенные при создании портрета, а разница между новыми координатами (XYsti ) и теми, которые «зашиты» в движок (XYexe ).
В качестве примера рассмотрим приведенные выше координаты RPC-57:
XYsti = 10, 5, 7, 20
XYexe = 9, 8, 8, 24
Вычитая из верхней строки нижнюю, получаем значения, которые следует записать в стишку 57.sti:
- для глаз: X = 1, Y = -3
- для губ: X = -1, Y = -4
Если у вас появились вопросы по статье, то их лучше задавать
на форуме, в ветке по редактированию JA2, бываю там регулярно.
Удачи,
VM
aka «Генеральный застройщик пустоши»
|