Раздел:
Работа с MPQ и импортом

Добавляем Preview для Warcraft III Classic 1.26+

Начнём с самого простого, что уже было описано в других ранних статьях бесчисленное число раз.
Чтобы добавить в карту своё превью, которое будет корректно отображаться в старых версиях клиента Warcraft III (до 1.31), достаточно импортировать в карту файл этой картинки с именем и форматом war3mapPreview.tga. Обязательно размер картинки должен быть 256x256 пикселей. Допустимая спецификация tga: Изображения с палитрой или TrueColor (24 или 32 бит на пиксель). Этот файл должен лежать в корневой директории импорта карты:

Добавляем Preview для Warcraft III Reforged 1.32+

В Reforged описанный выше метод перестал работать. Здесь больше нельзя установить по умолчанию свою картинку-превью. Её роль здесь играет изображение игровой карты, которое можно задать импортом файла с именем и форматом war3mapMap.dds. Далее, для того, чтобы сделать обратную замену preview на истинное изображение карты, при инициализации вызывается функция:
call BlzChangeMinimapTerrainTex("war3mapMapTrue.dds")
Здесь "war3mapMapTrue.dds" - полный путь к созданному вами изображению игровой карты (название файла произвольно).
Как самому создать изображение игровой карты
В редакторе открываем меню Файл -> Экспорт мини-карты. Далее в открывшейся вкладке можно задать отображение рельефа, воды, декораций и прочего, по желанию. Полученный файл tga переводим в формат dds. Для этого можно например использовать свободный графический редактор GIMP www.gimp.org с установленным dds plugin .
Проблема этого метода в том, что он не совместим с Warcraft III Classic 1.26+, так как там нет функции BlzChangeMinimapTerrainTex(). При её добавление непосредственно в код карты, при сохранении в старом редакторе будет ошибка компиляции.
Обойти эту ошибку можно использовав функцию
Preloader("ChangeMinimap.pld") 
Эта функция выполняет функцию PreloadFiles из импортированного и предварительно созданного файла предзагрузки "ChangeMinimap.pld". Воспользуемся здесь тем свойством этой команды, что при синтаксической ошибке в этой функции, она просто игнорируется (а не вызывает вылет игры с ошибкой).
С помощью блокнота создаём новый файл с названием и разрешением ChangeMinimap.pld и вставляем туда следующий текст:
function PreloadFiles takes nothing returns nothing
	call BlzChangeMinimapTerrainTex("war3mapMapTrue.dds")
endfunction
Файл ChangeMinimap.pld сохраняем и импортируем в карту. Добавляем Preloader("ChangeMinimap.pld") в функцию инициализации (можно через GUI):
Всё готово. Итого были импортированы следующие файлы:
Проверяем карту на наличие превью и корректность изображения миникарты для Classic и Reforged:
Пример полученной карты скачать здесь.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
32
3 года назад
Отредактирован Берги
0
Полезно, я как-то давно спрашивал, как ты это делаешь (при комбинировании версий), ты ответил но я ничего не понял, а теперь как понял...
0
22
3 года назад
0
Bergi_Bear:
Полезно, я как-то давно спрашивал, как ты это делаешь (при комбинировании версий), ты ответил но я ничего не понял, а теперь как понял...
Да. Решил тут всё подробно расписать. Надеюсь, будет кому полезно. Вроде ещё не мало карт выкладываются с заявленной обратной совместимостью.
0
32
3 года назад
0
Вроде ещё не мало карт выкладываются с заявленной
ну ты единственный в своём роде, я делал только совместимость на обе версии графики, но в пределах одного патча, а у тебя тут вот как
1
23
3 года назад
1
Хорош, полезность :)
1
37
3 года назад
1
Круто и технологично, респект!
1
32
3 года назад
1
Кстати, а если в функцию надо динамически аргументы передать, то получается pld шник заранее готовить, ведь загрузка лишь 1 раз в рефе возможно, до старта карты, так что сам способ, довольно ограниченный
Чтобы оставить комментарий, пожалуйста, войдите на сайт.