Устройство .w3m файлов

Добавлен , опубликован

Внутреннее устройство файла w3m (карты).

Архив содержит следующие файлы:
  • (listfile)
  • (attributes)
  • war3map.w3e
  • war3map.w3i
  • war3map.wtg
  • war3map.wct
  • war3map.wts
  • war3map.j
  • war3map.shd
  • war3mapMap.blp
  • war3map.mmp
  • war3map.wpm
  • war3map.doo
  • war3mapUnits.doo
  • war3map.w3r
  • war3map.w3c
  • war3map.w3u
  • war3mapImported (папка)

Назначение файлов:

(listfile)

Список всех входящих в архив файлов, представлен в обычном текстовом виде.

war3map.j

Здесь, на языке JASS2, который придумали в Blizzard, записаны все тригеры, которые есть в карте. Для получения информации о синтаксисе языка читайте статью Sergey-я о текстовых тригерах.

war3map.w3e

Здесь содержится информация о текстурировании поверхности. В этом и остальных последующих файлах для редактирования надо открыть не обычным блокнотом (он покажет всякую ерунду), а в шестнадцатеричной кодировке (Hex). Вся поверхность разбивается на одинаковые квадраты и каждой из четырёх точек квадрата присваивается определённый тип текстуры. При этом точка отвечает за прилегающую к ней четверть квадрата. Заголовок:
Тип Значение Описание
символ W3E! символьное значение, обязательный элемент, обозначающий тип файла
целое 0B 00 00 00 версия формата 11 (целое число всегда занимает 4 байта)
символ главная текстура. Возможны следующие варианты:
A Ashenvale
B Barrens
C Felwood
D Dungeon
F Lordaeron Fall
G Underground
L Lordaeron Summer
N Northrend
Q Village Fall
V Village
W Lordaeron Winter
X Dalaran
Y Cityscape
целое 0 или 1 используются ли custom tilesets
целое 1..16 количество используемых текстур земли
строка ID используемых текстур земли. Например "Ldrt" означает "Lordaeron Summer Dirt". Для получения полного списка ID текстур земли, откройте файл Terrain.slk, находящийся в директории TerrainArt в war3.mpq.
целое 1..16 количество используемых текстур утёсов
строка ID используемых текстур утёсов. Например "CLdi" означает "Lordaeron Cliff Dirt". Для получения полного списка ID текстур утёсов, откройте файл CliffTypes.slk, находящийся в директории TerrainArt в war3.mpq.
целое ширина карты + 1
целое высота карты + 1
дробное десятичное смещение центра карты по X
дробное десятичное смещение центра карты по Y
Эти параметры определяют местоположение центра карты, который нужен для технических целей. Начало координат находится в нижнем левом углу. По умолчанию центр координат сдвигается в геометрический центр карты.
Далее идёт непосредственно сама информация о текстурировании карты. Там в принципе ничего интересного нет, так как всё, что можно сделать вручную в этом файле, можно сделать и в самом редакторе.

war3map.shd

Не содержит заголовка, только рабочую информацию. Размер файла = 16x<ширина_карты>x<высота_карты>. Один байт может иметь значение: 00 - нет тени, FF - есть тень. Каждый квадрат текстуры (земли или утёса) содержит 16 квадратов тени (4*4).

war3map.wpm

Обозначает на карте места с разной степенью проходимости. На каждый текстурный квадрат приходится по 16 квадратов проходимости. Заголовок:
Тип Значение Описание
символ MP3W символьное значение, обязательный элемент, обозначающий тип файла
целое версия файла
целое <ширина_текстурной_карты>x4 ширина карты проходимости
целое <высота_текстурной_карты>x4 высота карты проходимости
В главной части один за одним идут байты, соответствующие квадратам проходимости. Их значениям соответствуют:
  • 00 - мост
  • 08 - неглубокая вода
  • 0A - глубокая вода
  • 40 - нормальная земля
  • 48 - места, где нельзя строить
  • CA - места, где нельзя ходить и строить
  • CE - граница карты

war3map.doo

Информация по деревьям.

war3map​Units.doo

Информация по предметам и дудадам.

war3map.w3i

Различная информация по карте, которая задаётся в едиторе в разделе сценарий.

war3map.wts

Здесь хранятся строковые значения введённые в некоторых полях тригеров.

war3mapMap.blp

Изображение миникарты.

war3map.mmp

The menu minimap - оформление значками миникарты, появляющейся при загрузке карты. Заголовок:
Тип Значение Описание
целое 0 неизвестно, что означает, но обычно = 0
целое количество значков
Главная часть. На каждый значок приходится по 16 байт:
Тип Значение Описание
целое тип значка
00 золотая шахта
01 нейтральное здание
02 стартовая точка игрока
целое коодината значка по Х
целое коодината значка по Y
Примеры:
10, 10 сверху слева
80, 80 по центру
F0, F0 снизу справа
целое Последние 4 байта блока первого значка - цвет в формате СС ЗЗ КК АА = синий, зелёный, красный, альфа канал.
03 03 FF FF красный
FF 42 00 FF синий
B9 E6 1C FF голубой
81 00 54 FF пурпурный
00 FC FF FF жёлтый
0E 8A FE FF оранжевый
00 C0 20 FF зелёный
B0 5B E5 FF розовый
97 96 95 FF светло серый
F1 BF 7E FF светло голубой
46 62 10 FF голубой
04 2A 49 FF коричневый
FF FF FF FF нет цвета

war3map.w3u

Здесь хранятся данные о всех самодельных юнитах (custom units).

war3map.wtg

Здесь хранятся все внутренние имена тригеров и переменных, которые редактор автоматически генерирует.

war3map.w3c

Здесь задаются все те параметры камеры, которые доступны в редакторе при открытии свойств камеры.

war3map.w3r

Параметры регионов. Тоже ничего новенького, интересного или чего-то такого, чего нельзя было бы задать через редактор.

war3map.w3s

Задаются звуки. Стандартные параметры.

war3map.wct

Здесь записываются текстовые тригеры. Так как они отличаются по своей структуре от обычных тригеров, то для их описания был создан специальный файл - это он. В текстовом виде они и задаются в этом файле. Или что-то в этом роде.

war3map.imp

А вот этот файл уже кое-чем интересен. Он появляется внутри архива w3m только если в едиторе был экспортирован в карту хотя бы один звук или музыка. Если это было сделано, то в w3m появляется экспортированный файл в папке war3mapImported, а также создаётся файл war3map.imp, в котором делается запись об экспортированном объекте. Структура записи:
Тип Значение Описание
целое 0 или 1 версия файла, это несущественный параметр, дающий только информацию для пользователя (не так уж и нужную на мой взгляд).
целое количество импортированных файлов.
Главная часть.
Тип Значение Описание
целое 5, 8, 10, 13 Если 5 или 8, то файл имеет стандартный путь war3mapImported\<имя_файла>, если 10 или 13, то нестандартный.
строка Путь к импортированному файлу.
символ #0 в конце строки нулевой символ.

Автор оригинала: Zepir
`
ОЖИДАНИЕ РЕКЛАМЫ...
8
А как скопировать файл из одной карты в другую?
20
Сначало извлекаешь из одной карты, потом добавляешь в другую через Add File.
2 комментария удалено
17
здесь кстати не пояснен формат imp. там перед началом имени каждого импортированного файла записан один байт. Если 08, значит файл имеет стандартный путь, если 0D - значит нестандартны (галочка в редкаторе).
2
war3map.w3e
Там на все целочисленные значения уделяется 4 байта?
Подскажите прогу, которой можно извлекать файлы из архива.
Есть информация о файле, содержащем высоты ландшафта и о том, как эди данные считывать?
2
В каком файле находятся способности героя (магия) если war3map.w3u файла нет?
10
Спасибо, очень помогло, делал протект карты, без этой статьи было бы сложно!
17
Как можно получить доступ к карте высот? Дабы изменять высотку различных ячеек ландшафта.
12
Cancel:
Как можно получить доступ к карте высот? Дабы изменять высотку различных ячеек ландшафта.
Вот ссылка, там подробно описано на английском world-editor-tutorials.thehelper.net/cat_usersubmit.php?view=427...
17
Вот ссылка, там подробно описано на английском
Спасибо!
Этот не ловкий момент когда ты ноль в английском...
29
Cancel, в общем вот:
там где идет речь про w3e файл:
Англ
Data:
Each tilepoint is defined by a block of 7 bytes.
The number of blocks is equal to Mx*My.
short: ground height
C000h: minimum height (-16384)
2000h: normal height (ground level 0)
3FFFh: maximum height (+16383)
short: water level + map edge boundary flag*(see notes)
4bit: flags*(see notes)
4bit: ground texture type (grass, dirt, rocks,...)
1byte: texture details (of the tile of which the tilepoint is the bottom left corner) (rocks, holes, bones,...). It appears that only a part of this byte is used for details. It needs more investigations
4bit: cliff texture type
4bit: layer height

*flags notes:
Flags values (shown as big endian):
 0x4000 --> boundary flag 1 (shadow generated by the world editor on the edge of the map)
 0x0010 --> ramp flag (used to set a ramp between two layers)
 0x0020 --> blight flag (ground will look like Undead's ground)
 0x0040 --> water flag (enable water)
 0x0080 --> boundary flag 2 (used on "camera bounds" area. Usually set by the World Editor "boundary" tool.)

Water level:
Water level is stored just like ground height. The highest bit (bit 15) is used for the boundary flag 1.

Tilepoint data example:
51 21 00 62 56 84 13
51 21 --(little endian)--> 0x2151 --(hex-->dec)--> height = 8529
00 62 --(little endian)--> 0x6200
 (extract boundary flag)--> (0x6200 & 0xC000) = 0x4000 boundary flag set
 (extract water data)--> (0x6200 & 0x3FFF) = 0x2200 --(hex-->dec)--> water level = 8704
56 --> 5 sets both water flag and ramp flag, 6 means tilepoint is using ground type #6 in the tilesets table
84 --> means tilepoint is using detail texture #132 (=0x084)
13 --> 1 means cliff type #1 (cliff tilesets table), 3 means tilepoint on layer "3"
The tilepoint "final height" you see on the WE is given by:
(ground_height - 0x2000 + (layer - 2)*0x0200)/4
where "0x2000" is the "ground zero" level, 2 the "layer zero" level and "0x0200" the layer height
 = (0x2151 - 0x2000 + 1*0x0200)/4
 = (8529 - 8192 + 512)/4
 = 212,25

The tilepoint "water level" you see on the WE is given by:
(water_level - 0x2000)/4 - 89.6
where "0x2000" is the "ground zero" level, -89.6 is the water zero level (given by the water.slk file height = -0,7 --> water_zero_level = -0,7*128):
 = 8704/4 - 89,6
 = 38,4

In this case, water flag is set and water level is below the ground level so we will not see the water. This is just an example and I don't think you can find such a tilepoint on a map. It was just here for demonstration purpose.
Русский чуть позже
21
alexprey:
Русский чуть позже
Русский
Данные:
Каждая точка ландшафта (tilepoint) состоит из блока 7 байтов.
Число таких блоков еквивалентно Mx*My. (число всех тайлов в карте)
В эти 7 байт записывается:
  • short int: Высота земли:
C000h: минимальная высота (-16384)
2000h: высота равная нулю (ground level 0)
3FFFh: максимальная высота (+16383)
short int - Это короткая целочисленная
Короткие целочисленные размещаются используя 2 байта в "Little Endian" (зеркальном или хм.. перевёрнутом?) порядке.
Они близки к C++ "signed short" типу но их диапазон чисел от -16384 до 16383. Имеется ввиду что 2 верхних бита свободны для использования под флаг, например.
пример little endian - число 0x2151 в хексе представляется как 51 21
  • short int: уровень воды + привязка края карты (map edge boundary flag) *(см заметки)
  • 4 бита: флаги*(см заметки)
  • 4 бита: тип текстуры земли (трава, почва, камни)
  • 1 байт: детали текстур (какая именно текстура из нескольких будет отрисовываться из нижнего левого угла квадрата тайла) (камни, дыры, кости,...). Получается что только часть этого байта используется для информации о деталях. Необходимо подробное изучение этого момента.
  • 4 бита: тип текстуры клиффа (склоны? или как их назвать, в общем обрамление разных этажей ландшафта)
  • 4 бита: высота слоя
*заметки: Флаговые значения (выглядит как big endian): 0x4000 --> привязочный флаг 1 (тень генерируемая World Editor'ом на краях карты) 0x0010 --> флаг наклона (используется для установки наклона между двумя слоями) 0x0020 --> флаг проклятия (земля будет проклятой нежитью) 0x0040 --> флаг воды (включает воду) 0x0080 --> привязочный флаг 2 (используемый привязками камеры "camera bounds". Обычно устанавливается World Editor'ской привязочной "boundary" утилитой.) Уровень воды: Уровень воды хранится так же как уровень высоты земли. Высший бит (bit 15) используется для привязочного флага 1. Пример информации одной точки тайла (Tilepoint): 51 21 00 62 56 84 13 51 21 --(little endian)--> 0x2151 --(hex-->dec)--> высота = 8529 00 62 --(little endian)--> 0x6200 (узнаем привязочный флаг)--> (0x6200 & 0xC000) = 0x4000 установка привязочного флага (узнаем уровень воды)--> (0x6200 & 0x3FFF) = 0x2200 --(hex-->dec)--> уровень воды = 8704 56 --> 5 устанавливает оба флага воды и наклона (4+1), 6 говорит о том что тайлпоинт использует тайлсет земли #6 из набора тайлсетов (это подземелье) 84 --> означает что тайлпоинт использует детальную текстуру #132 (=0x084) 13 --> 1 означает тип клиффа #1 (из таблицы клиффов тайлсетов), 3 говорит о том что наша точка тайла располагается на 3ьем слое (layer) Итоговая высота "final height" которую вы видите в редакторе WE расчитывается как: (высота земли - 0x2000 + (слой - 2)*0x0200)/4 где "0x2000" это нулевой "ground zero" уровень земли, 2 это "layer zero" нулевой слой и "0x0200" это высота слоя = (0x2151 - 0x2000 + 1*0x0200)/4 = (8529 - 8192 + 512)/4 = 212,25
Тайлсет Обозначение
A Ashenvale
B Barrens
C Felwood
D Dungeon
F Lordaeron Fall
G Underground
L Lordaeron Summer
N Northrend
Q Village Fall
V Village
W Lordaeron Winter
X Dalaran
Y Cityscape
Z Sunken Ruins
I Icecrown
J Dalaran Ruins
O Outland
K Black Citadel
Точка воды "water level" которую вы видите в WE расчитывается: (уровень воды - 0x2000)/4 - 89.6 где "0x2000" это нулевой"ground zero" уровень земли, -89.6 это нулевой уровень воды (данный в water.slk файле, высота = -0,7 --> water_zero_level = -0,7*128): = 8704/4 - 89,6 = 38,4
В данном конкретном случае, флаг воды установлен, но уровень воды будет ниже уровня земли, получается мы не увидим воду. Это всего лишь пример, и я думаю вы не найдёте такого тайлпоинта внутри карты. Это только для примера.
Перевод изложил со своей точки зрения.. местами дополнив информацией из других мест и своими соображениями. Возможно я что-то не так понял где-то...
Вообще информация довольно интересная).
17
Ребята, спасибо, вы все очень помогли!
Пришлите мне в лс свои имена (или ники) которые можно будет вставить в благодарности генератора.
17
ники как бы написаны вверху комента
"имена (или ники)" "как бы" пусть сами решают что из двух следует указать
Этот комментарий удален
1
кто так и не нашел, где находятся способности (abilities) - они находятся в файле war3map.w3a 👍
1
(я уже тут писал🤣)
Кто также как и я искал способ сбросить версию карты (Map Version) (приложил скрин ниже), то я нашел решение. Нужен файл w3i (из всех имеющихся данных он казался мне тем самым необходимым)! Но он никак не редактируется, поэтому нужно - заменить этот файл на файл с новой карты и будет версия 0! MPQ Editor в помощь.
Но потом изменятся размеры карты, поэтому их надо обязательно будет отредактировать и сохранить карту по новой. Вроде больше ничего не меняется.
Загруженные файлы
Чтобы оставить комментарий, пожалуйста, войдите на сайт.