Цель
Разбор примера модификации анимации юнитов на поле боя.Версия игры
«Disciples II: Восстание Эльфов» из состава «Disciples II. Летопись Вселенной».Инструменты
- D2ResExplorer (менеджер файлов ресурсов Disciples 2)
- D2UnitsViewer (утилита просмотра информации о юнитах)
- GIMP 2 (мощный и многоцелевой графический редактор)
Модификация
1. В D2UnitsViewer выбираем юнит и анимацию
- модифицируемым юнитом будет «Сквайр» (ключ g000uu0001);
- модифицируемая анимация — анимация стоящего к нам лицом юнита (файл Imgs\BatUnits.ff, элемент IndexMap, имя элемента — G000UU0001IDLE1A00).
2. В редакторе карт создаём новую карту для отладки
- всего два отряда;
- в обоих отрядах нужный юнит в различных позициях;
- никаких условий победы и прочих красот.
3. Проверяем карту в игре
- игру запускаем в оконном режиме (экономим время на запуск и закрытие);
- начинаем новый одиночный сценарий;
- сохраняемся перед боем (чтобы сэкономить немного времени при проверках);
- запускаем бой, проверяем нужную анимацию.
4. В D2ResExplorer выгружаем текущую анимацию
- открываем в дереве «Imgs\BatUnits.ff», затем «IndexMap Structured Data»;
- ищем элемент с именем G000UU0001IDLE1A00 (начинаем набирать имя и соотв. элемент найдётся автоматически);
- переключаем экспорт изображений на GIF-формат;
- с помощью пункта меню «Извлечь в файлы...» получаем файл «IndexMap#28123-AnimMap#.gif» с анимацией.
5. В GIMP 2 модифицируем анимацию
- открываем файл «IndexMap#28123-AnimMap#.gif» (анимация автоматически распадётся на 16 слоёв);
- правим изображения в слоях (напр. укорачиваем меч);
- экспортируем полученную анимацию в файл с именем «M000UU0001IDLE1A00.GIF»;
- в диалоге экспорта выставляем «Сохранить как анимацию» и «Один кадр на слой (замена)».
6. В D2ResExplorer загружаем текущую анимацию
- открываем в дереве «Imgs\BatUnits.ff» и с помощью пункта меню «Импорт анимации из GIF...» импортируем файл «M000UU0001IDLE1A00.GIF»;
- открываем в дереве «Imgs\BatUnits.ff» и запускаем пункт меню «Сортировка записей ImageMap»;
- открываем в дереве «Imgs\BatUnits.ff», затем «IndexMap Structured Data»;
- ищем элемент с именем G000UU0001IDLE1A00 (начинаем набирать имя — соотв. элемент найдётся автоматически);
- переходим в редактор анимации и заменяем стандартные фреймы на загруженные (легко находятся с помощью фильтра «_IMP*»);
- количество фреймов должно совпасть с исходным (т.е. 16 фреймов);
- сохраняем изменения.
7. Проверяем анимацию в игре
- загружаем сохранение, начинаем бой и смотрим что получилось;
- наблюдаем, что получилось нечто странное — нужной анимации нет, анимации теней тоже нет;
- сидим, грустим.
8. Пробуем исправить проблему с анимацией
- восстанавливаем оригинальный «Imgs\BatUnits.ff»;
- возвращаемся в GIMP 2 и убираем половину слоёв (будущих фреймов);
- загружаем новую анимацию и используем каждый фрейм по 2 раза (т.е. получаем 16 фреймов в анимации);
9. Проверяем анимацию в игре (второй дубль)
P.S. Есть подозрение, что проблема вызвана размером формируемого базового изображения (см. M000UU0001IDLE1A00.PNG в MQDB-контейнере). Сокращение числа кадров в GIF привело к уменьшению размеров базового изображения, что и позволило вернуть анимацию.