О статье
В этой статье постараюсь объяснить как добавить более 2-ух клифов в редактор/карту. Сразу скажу что не всё так хорошо как хотелось бы и для этого нам понадобится самоподключающийся .mix архив, нижу распишу почему.
Тестировалось только на 1.26.
Подготовка
Немного базы
Клифы, в отличие от тайлов, представляют из себя модели с Replaceable (заменяемой) текстурой и хранятся по путям:
Из всего этого видно что клифы разделяются на 2 основных типа - Искусственные (с ровными краями) и Природные (с кривыми краями).
- Doodads\Terrain\CityCliffTrans - искусственные клифы для переходов между уровнями рельефа;
- Doodads\Terrain\CityCliffs - искусственные клифы;
- Doodads\Terrain\CliffDoodad - клифы-декорации, по типу пещер, трещин и т.д.;
- Doodads\Terrain\CliffTrans - природные клифы для переходов между уровнями рельефа;
- Doodads\Terrain\Cliffs - природные клифы.
Из всего этого видно что клифы разделяются на 2 основных типа - Искусственные (с ровными краями) и Природные (с кривыми краями).
Думаю разница что где ясна.
Данные о клифах хранятся в файле TerrainArt\CliffTypes.slk.
Названия говорят сами за себя но вот список обозначений:
- CliffId - идентификатор клифа, именно он определяет какие клифы будут использоваться (в war3map.w3e);
- cliffModelDir - директория с моделями клифов;
- rampModelDir - директория с моделями клифов для переходов между уровнями рельефа;
- texDir - директория с текстурами клифов;
- texFile - файл текстуры клифа;
- name - имя клифа отображаемое в редакторе;
- groundTile - нижний тайл который будет рисоваться у подножья клифа;
- upperTile - верхний тайл который будет рисоваться у вершины клифа, если указан прочерк то используется groundTile;
- cliffClass - нечто вроде классификации клифов, по умолчанию c1 для Cliff1 и c2 для Cliff0;
- oldID - похоже нечто вроде старого идентификатора, у новых клифов дополнения TFT выставлен на -1 так что смею предположить что не используется.
Небольшой ликбез
В mpq архивах игры war3.mpq и War3x.mpq лежат еще несколько mpq архивов с именами A.mpq, B.mpq, C.mpq и т.п. - эти архивы и хранят текстуры клифов, воды, некоторых уберсплатов и иногда некоторых юнитов. Имя архива это начальная буква типа ландшафта который использует карта (A.mpq - Ashenvale), суть в том что игра подгружает нужный из этих архивов в зависимости от базового типа ланда.
Нужный инструментарий
- Любой MPQ редактор (я юзаю Ladik's MPQ Editor).
- Любой редактор для работы с SLK таблицами (тот же Microsoft Excel).
- Любой HEX редактор (нам подойдет и Notepad++ с плагином HEX-Editor). Опционально
Добавляем типы клифов
По стандарту в редакторе доступны 2 клифа, однако их точно так же как и тайлы можно растянуть до 16 штук, главное чтобы в карте присутствовали тайлы указанные в groundTile и upperTile. У стандартных клифов эти значения обычно одинаковы, однако есть исключение - клиф COrd (Бездна) использует тайл Oaby для подножья и Osmb для вершины, создавая эффект бездны (как ни странно).
Вообще ландшафт Глушь сам по себе интересен, например у него нет воды а вместо глубоководья черная дымка.
Вообще ландшафт Глушь сам по себе интересен, например у него нет воды а вместо глубоководья черная дымка.
В данной статье мы будем добавлять к ландшафту Города стандартные тайлы и клифы Глуши.
Способ I - Через редактор варика
Сразу скажу что через Дополнительно - Изменить тип ландшафта кнопка Добавить не активна если выбрать тайл с клифом (это те что с красным квадратиком) даже если хватает стандартного места.
Тут для видимости удалены большинство тайлов.
Остается вариант через Extensions - Edit Tiles, для этого выбираем нужные нам тайлы которые используют клифы, нажимаем Ok, сохраняем и перезапускаем редактор.
Справа на палитру должно было добавится 2 новых клифа, но добавился только 1.
Вот этот вот Edit Tiles какой-то баганый - не показывает красным квадратиком что есть клиф а только можно ли строить на тайле (синий квадратик), хотя при наведении мыши на тайл всплывает подсказка с названием тайла и "(Cliff)" справа от названия, и то не всегда.
Способ II - Через эдит файла ландшафта
Вообще как я понял исходя из файла тайлов TerrainArt\Terrain.slk там тайлы логически разделяются на 2 типа, те которые используются клифами и те которые не используются.
Тут нам интересны первые два поля:
- tileID - идентификатор тайла, тайлы которые обычно используются дефолтными клифами начинаются с первой буквы ландшафта (Ldrt, Fdrt, Wgrs...) а их cliffSet равен -1;
- cliffSet - если не равен -1, то это вот те тайлы которые будут отображаться в пунктиках Дополнительные текстуры - Базовые текстуры склонов (см выше скрин где мы пытались добавлять стандартными средствами редактора) а их tileID начинаются с буквы "c", второй буквой идет ландшафт (cAc2, cBc1, cOc1...).
Короче, к чему это, почему в I способе добавился только 1 клиф вместо 2? Если открыть файл ландшафта war3map.w3e в HEX редакторе то можно будет глянуть какие ID тайлов и клифов использует карта (статья где расписано что из себя представляет этот файл).
Что нужно сделать:
- В списке тайлов YdrtYbtlYsqdYdtrYblmYrtlYgsbYhdgYwmbOdrtcOc2cOc1 последние 3 это добавленые нами тайлы в I способе, из них клифами используется только Odrt, остальные же cOc2 и cOc1 надо заменить на их аналог Osmb и Oaby (их можно найти в том же TerrainArt\Terrain.slk).
- В списке клифов CYdiCYsqCOdi нужно добавить клиф COrd (его можно найти в том же TerrainArt\CliffTypes.slk) и увеличить кол-во типов клифов на 1.
Закидываем war3map.w3e в архив карты, открываем ее, видим что теперь клифов стало 4 но при этом они используют базовые текстуры клифов текущего ландшафта, хотя groundTile/upperTile отображает правильно.
Для правильного отображения придется редактировать TerrainArt\CliffTypes.slk и запихивать его в mix, т.к. эта таблица подгружается до карты и в импорт ее кидать толку нет, анлаки(
Заставляем нормально отображать текстуры
На этом моменте создаем пустой .mix архивчик по этой статье и назовем его например CliffFix.mix.
Смотря на TerrainArt\CliffTypes.slk можно сразу заметить что их путь текстуры texFile имеет только 2 значения - Cliff0 и Cliff1, т.е. так задумано что на 1 карту будет использоваться всего 2 типа клифа. Как было написано выше в ликбезе, текстуры по этим путям (ReplaceableTextures\Cliff\Cliff0.blp и ReplaceableTextures\Cliff\Cliff0.blp) подгружается в зависимости от базового типа ланда, поэтому придется изменить значения этого поля.
Кроме как во вложенных .mpq архивах (A.mpq, B.mpq, C.mpq) текстуры клифов из дополнения ROC хранятся в директории war3.mpq по пути ReplaceableTextures\Cliff\.
Остальные же текстуры из дополнения TFT хранятся в этих вложенных архивах, нужно их оттуда достать и закинуть в наш CliffFix.mix по тому же пути, обозвав их по примеру выше. Можно было конечно сделать это и в импорте карты, но мы один хрен .mix делаем.
Далее необходимо отредачить TerrainArt\CliffTypes.slk и так же закинуть его в CliffFix.mix.
Здесь мы изменили путь текстуры texFile с "относительного" на "абсолютный" а так же сделали для всех клифов уникальный cliffClass - во время тестов выяснилось что если этого не сделать то при любом изменении палитры тайлов, замене клифов и прочих действиях которые будут вызывать перерисовку/ретекстур ландшафта будут сбиваться добавленные клифы до базовых (внутри это как-то с этим полем чекается наверн).
Закидываем CliffFix.mix в корень игры, запускам мапу и уот:
Закидываем CliffFix.mix в корень игры, запускам мапу и уот:
Для того чтобы клифы так же отображались в редакторе надо немного "пропатчить" .mpq вара таким же образом как и наш CliffFix.mix.
Edited by EugeAl
Просто хочу сделать "из коробки" )
Edited by EugeAl
Чтобы разные шкурки у зданий делать, к примеру
Тут же писал что оно подгружает данные их архива в зависимости от базового типа ланда. Имена оно никак не меняет. Можешь сделать в моделе путь к текстуре Nigga.blp, и во вложенные архивы разные текстуры с этим же именем запихнуть.
Подобное уже есть, например текстура Units\Creeps\GrizzlyBear\BrownBear.blp в зависимости от ланда подгружается.
Edited by EugeAl