War3map w3i чем открыть
X-deprotect (далее xdep) - утилита для восстановления карт для Warcraft3: RoC/TFT, поврежденных специальными утилитами ("оптимизаторами" или "протекторами") таким образом, что в игре они работают, но в редакторе - не открываются.
Следует понимать, что получить из "защищенной" карты в точности ту версию, какой она была исходно, в общем случае невозможно. Но почти всегда можно получить версию, работающую абсолютно неотличимо от оригинала, при этом свободно редактируемую.
Под восстановлением здесь и далее подразумевается процесс получения такой карты, которую можно открыть и сохранить в редакторе, при этом функциональность которой останется полностью идентичной исходной карте.
xdep выполняет необходимый минимум операций для такого восстановления, а также, опционально, некоторые дополнительные операции для облегчения понимания устройства карты.
(эти операции, подробно описанные ниже, могут вызывать сбой на некоторых картах, но так как для восстановления карты они не обязательны, их можно отключить в конфигурации)
xdep предназначен не столько для бездумного снятия "защиты" в 1 клик (хотя и такое использование возможно), сколько для автоматизации многих рутинных операций при "ручном" восстановлении карты. На любом шаге в автоматический процесс восстановления можно вмешаться, редактируя файлы во временной папке.
На получившейся восстановленой карте можно применять утилиты типа Deprotect, Dewidgetizer для дальнейшего восстановления, например, GUI-триггеров или объектных данных.
(в силу того, что эти операции довольно сложны, и при этом не являются необходимыми, эта утилита их не выполняет)
Или же просто редактировать скрипт карты через редактор, не выполняя рутинных операций распаковывания/запаковывания файла war3map.j из карты со всеми связанными с этим глюками.
Что конкретно делает xdep в минимальной работающей конфигурации:
- распаковывает все файлы карты в отдельную временную папку;
- восстанавливает список файлов в архиве, методом сканирования всех файлов в поисках возможных имен других файлов;
- исправляет файл war3map.w3i, намеренно повреждаемый утилитами для защиты;
- удаляет файлы (attributes), (listfile), (signature), переносит скрипт карты в war3map.j;
- восстанавливает список импортированных файлов war3map.imp;
- восстанавливает файлы war3map.wtg, war3map.wct, war3mapUnits.doo на основе скрипта карты;
(сам скрипт карты вносится в один триггер и изменяется таким образом, чтобы карта сохранялась без ошибок в редакторе)
- собирает получившиеся файлы в новый архив, добавляя ему заголовок от исходного.
В списке дополнительных возможностей:
- переименовывание функций со "стандартными" именами, назначаемыми редактором, во избежание конфликтов имен при сохранении (эта опция необходима, если при защите карты не использовалось "запутывание" имен функций)
- подстановка кода однократно используемых функций на место их вызова: нужно для распознавания секции инициализации, для восстановлениия данных о start locations, юнитах, регионах и прочем (обычно это и так выполняется некоторыми утилитами для оптимизации)
- переименовывание глобальных переменных с запутанными (obfuscated) именами в нечто типа udg_integers01
- расстановка отступов в скрипте
- восстановление данных о start locations в файл war3mapUnits.doo на основе секции инициализации (если эта опция отключена, war3mapUnits.doo все равно создается, но пустым, т.к. он необходим WE)
Здесь, на языке 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
war3mapUnits.doo
war3map.w3i
war3map.wts
war3mapMap.blp
war3map.mmp
Тип | Значение | Описание |
---|---|---|
целое | 0 | неизвестно, что означает, но обычно = 0 |
целое | количество значков |
Тип | Значение | Описание |
---|---|
целое | тип значка |
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
war3map.wtg
Здесь хранятся все внутренние имена тригеров и переменных, которые редактор автоматически генерирует.
war3map.w3c
war3map.w3r
Параметры регионов. Тоже ничего новенького, интересного или чего-то такого, чего нельзя было бы задать через редактор.
war3map.w3s
war3map.wct
Здесь записываются текстовые тригеры. Так как они отличаются по своей структуре от обычных тригеров, то для их описания был создан специальный файл - это он. В текстовом виде они и задаются в этом файле. Или что-то в этом роде.
war3map.imp
А вот этот файл уже кое-чем интересен. Он появляется внутри архива w3m только если в едиторе был экспортирован в карту хотя бы один звук или музыка. Если это было сделано, то в w3m появляется экспортированный файл в папке war3mapImported, а также создаётся файл war3map.imp, в котором делается запись об экспортированном объекте. Структура записи:
Тип | Значение | Описание |
---|---|---|
целое | 0 или 1 | версия файла, это несущественный параметр, дающий только информацию для пользователя (не так уж и нужную на мой взгляд). |
целое | количество импортированных файлов. |
ДейЛак
ДейЛак
RazArt
RazArt
Vellear
Vellear
Sauron911
Sauron911
PlayerDark
PlayerDark
здесь кстати не пояснен формат imp. там перед началом имени каждого импортированного файла записан один байт. Если 08, значит файл имеет стандартный путь, если 0D - значит нестандартны (галочка в редкаторе).
Rehan
Rehan
SDreary
SDreary
grinja88
grinja88
Cancel
Cancel
Cancel
Cancel
alexprey
alexprey
awesomesk1ll
awesomesk1ll
Данные:
Каждая точка ландшафта (tilepoint) состоит из блока 7 байтов.
Число таких блоков еквивалентно Mx*My. (число всех тайлов в карте)
- 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.
Итоговая высота "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
В данном конкретном случае, флаг воды установлен, но уровень воды будет ниже уровня земли, получается мы не увидим воду. Это всего лишь пример, и я думаю вы не найдёте такого тайлпоинта внутри карты. Это только для примера.
Перевод изложил со своей точки зрения.. местами дополнив информацией из других мест и своими соображениями. Возможно я что-то не так понял где-то.
Вообще информация довольно интересная).
int: file format version = 25
int: number of saves (map version)
int: editor version (little endian)
String: map name
String: map author
String: map description
String: players recommended
float[8]: "Camera Bounds" as defined in the JASS file
int[4]: camera bounds complements* (see note 1) (ints A, B, C and D)
int: map playable area width E* (see note 1)
int: map playable area height F* (see note 1)
*note 1:
map width = A + E + B
map height = C + F + D
int: flags
0x0001: 1=hide minimap in preview screens
0x0002: 1=modify ally priorities
0x0004: 1=melee map
0x0008: 1=playable map size was large and has never been reduced to medium (?)
0x0010: 1=masked area are partially visible
0x0020: 1=fixed player setting for custom forces
0x0040: 1=use custom forces
0x0080: 1=use custom techtree
0x0100: 1=use custom abilities
0x0200: 1=use custom upgrades
0x0400: 1=map properties menu opened at least once since map creation (?)
0x0800: 1=show water waves on cliff shores
0x1000: 1=show water waves on rolling shores
0x2000: 1=unknown
0x4000: 1=unknown
0x8000: 1=unknown
char: map main ground type
Example: 'A'= Ashenvale, 'X' = City Dalaran
int: Loading screen background number which is its index in the preset list (-1 = none or custom imported file)
String: path of custom loading screen model (empty string if none or preset)
String: Map loading screen text
String: Map loading screen title
String: Map loading screen subtitle
int: used game data set (index in the preset list, 0 = standard)
String: Prologue screen path (usually empty)
String: Prologue screen text (usually empty)
String: Prologue screen title (usually empty)
String: Prologue screen subtitle (usually empty)
int: uses terrain fog (0 = not used, greater 0 = index of terrain fog style dropdown box)
float: fog start z height
float: fog end z height
float: fog density
byte: fog red value
byte: fog green value
byte: fog blue value
byte: fog alpha value
int: global weather id (0 = none, else it's set to the 4-letter-id of the desired weather found in TerrainArt\Weather.slk)
String: custom sound environment (set to the desired sound lable)
char: tileset id of the used custom light environment
byte: custom water tinting red value
byte: custom water tinting green value
byte: custom water tinting blue value
byte: custom water tinting alpha value
int: max number "MAXPL" of players
array of structures: then, there is MAXPL times a player data like described below.
int: max number "MAXFC" of forces
array of structures: then, there is MAXFC times a force data like described below.
int: number "UCOUNT" of upgrade availability changes
array of structures: then, there is UCOUNT times a upgrade availability change like described below.
int: number "TCOUNT" of tech availability changes (units, items, abilities)
array of structures: then, there is TCOUNT times a tech availability change like described below
int: number "UTCOUNT" of random unit tables
array of structures: then, there is UTCOUNT times a unit table like described below
int: number "ITCOUNT" of random item tables
array of structures: then, there is ITCOUNT times a item table like described below
Players data format:
int: internal player number
int: player type
1=Human, 2=Computer, 3=Neutral, 4=Rescuable
int: player race
1=Human, 2=Orc, 3=Undead, 4=Night Elf
int: 00000001 = fixed start position
String: Player name
float: Starting coordinate X
float: Starting coordinate Y
int: ally low priorities flags (bit "x"=1 --> set for player "x")
int: ally high priorities flags (bit "x"=1 --> set for player "x")
Forces data format: (thx Soar)
int: Foces Flags
0x00000001: allied (force 1)
0x00000002: allied victory
0x00000004: share vision
0x00000010: share unit control
0x00000020: share advanced unit control
int: player masks (bit "x"=1 --> player "x" is in this force)
String: Force name
Upgrade availability change format (thx PitzerMike)
int: Player Flags (bit "x"=1 if this change applies for player "x")
char[4]: upgrade id (as in UpgradeData.slk)
int: Level of the upgrade for which the availability is changed (this is actually the level - 1, so 1 => 0)
int Availability (0 = unavailable, 1 = available, 2 = researched)
Tech availability change format (thx PitzerMike)
int: Player Flags (bit "x"=1 if this change applies for player "x")
char[4]: tech id (this can be an item, unit or ability)
there's no need for an availability value, if a tech-id is in this list, it means that it's not available
Random unit table format (thx PitzerMike)
int: Number "n" of random groups
then we have n times the following data (for each group)
int: Group number
string: Group name
int: Number "m" of positions
positions are the table columns where you can enter the unit/item ids, all units in the same line have the same chance, but belong to different "sets" of the random group, called positions here
int[m]: for each positon is specified if it's a unit table (=0), a building table (=1) or an item table (=2)
int: Number "i" of units/items, this is the number of lines in the table, each position can have that many or fewer entries
now there's "i" times the following structure (for each line)
int: Chance of the unit/item (percentage)
char[m * 4]: for each position are the unit/item id's for this line specified
this can also be a random unit/item ids (see bottom of war3mapUnits.doo definition)
a unit/item id of 0x00000000 indicates that no unit/item is created
Random item table format (thx PitzerMike)
int: Number "n" of random item tables
then we have n times the following data (for each item table)
int: Table number
string: Table name
int: Number "m" of item sets on the current item table
then we have m times the following data (for each item set)
int: Number "i" of items on the current item set
then we have i times the following two values (for each item)
int: Percentual chance
char[4]: Item id (as in ItemData.slk)
this can also be a random item id (see bottom of war3mapUnits.doo definition)
0 Спам
0 Спам
Открываю карту,а выдает ошибку почему??
0 Спам
Joker, открываю карту, извлекаю war3map.j, ничего в нём не меняю, вставляю обратно, карта начинает весить больше, при попытке её создать крашится, файл Corrupted. Где-то здесь в комментариях ты на похожую ошибку отвечал, что не удалён файл Attributes. Проверил, его нет. Что я делаю не так?
0
Такой файл только в MPQ Mastere надо было удалять) Карта крашится может только из за каких-то ошибок в коде. Размер на это не влияет) Ну а если размер для "локальной игры" большой, то просто оптимизатором по карте пройтись)
0 Спам
Джокер мож мне карту взломать у меня не получается .
0
1 Спам
Помоги, ломал доту всё вставил от термита, где функции под локалами всё, запускаю, там где иигроки-кланы ничего не отображается, карта не запускается
0 Спам
еще занимаешься этим джокер? можешь помочь?
0 Спам
0
0 Спам
0 Спам
проверял все ли правильно вставил (все сделано по инструкции) можете скинуть карту без защиты чтобы проверить.
0
0 Спам
0
1 Спам
спасибо большое за помощь (разобрался с кодировками примерно за пол-часа и взломать наконецто получилось)
0
0 Спам
0
0 Спам
что делать если mpq editor нехочет удалять файлик (attributes) из архива карты и пишет невозможна удалить это внутренний файл а также не дает заменить war3map.j
Добавлено (29.08.2015, 23:07)
---------------------------------------------
Урок первый.
Классификации типов защиты. Первый контакт с архивом.
Тип первый: Тула Векса
Тула Векса задумывался как самый обыкновенный оптимизатор карт варкрафта. Но, неожиданно для всех, отлично проявил себя в протекте.
Защита первого типа САМАЯ распространённая. Откройте ваш MPQ Master, и с помощью него попробуйте открыть целевую карту. Если вам это удастся без труда, то это карта с уровнем защиты первого типа (или вовсе без протекта).
Тип второй: Слабое повреждение заголовка
Такой протект часто можно встретить в азиатских рпг. MPQ Master его не берёт. А берёт его связка из MPQEditor, RMPQEx и X-Deprotect.
Тип третий: Ken's Spazzler
Этот тип защиты использовался мной в протекте The Blood Way ORPG. Его особенность в том, что заголовок испорчен до такой степени, что карта не открывается нигде, кроме как в MPQView. Это создаёт нам дополнительные проблемы, о которых будет сказано позже. Понижается до уровня защиты второй степени утилитой DeSpazzler.
Тип четвертый: Сильное повреждение заголовка
В последнее время, часто стали появляться новые разновидности спазлера, не поддающиеся снятию. В принципе, тот же самый спазлер, который можно обойти MPQView(но опять-таки это будет не слишком легко) Самый последний и сложный для взлома тип.
Добавлено (29.08.2015, 23:07)
---------------------------------------------
Урок второй.
Работа с картой в зависимости от типа защиты.
1)Открываете MPQ Master
2)Открываете целевую карту(используя листфайл)
3)Извлекаете файлы
4)Редактируете их
5)Добавляете обратно
. ВНИМАНИЕ.
При каждом обновлении архива, его размер будет увеличен(200-400кб)
Добавлено (29.08.2015, 23:08)
---------------------------------------------
Второй тип отличается от первого тем, что в этом случае нельзя отредактировать карту напрямую.
1)Открываете RMPQEx
2)Щёлкаете Browse и выбираете карту
3)Щёлкаете Listfiles и добавляете листфайл(есть в архиве)
4)Щёлкаете Open, а затем Auto Search
5)Щёлкаете Extract Listfile и сохраняете куда душе угодно с именем listfile.txt
6)Открываем папку с X-Deprotect
7)Кидаете туда листфайл из 5 шага
8)Кидаете туда целевую карту и переименовываете в test.w3x ИЛИ в файле xdep.ini правите параметр inmapfile в соответствии с названием карты.
9)Открываете MPQEditor
10)Открываете карту, используя внешний листфайл, поставив галочку на "Force opening the MPQ. "
11)В директории с X-Deprotect создайте папку test.w3x.temp(зависит от имени карты, указанного в xdep.ini) а в ней же папку files
12)Извлеките туда все файлы из MPQEditor-а
13)Запускаете xdep.exe
14) После выполнения на выходе получаете (в той же папке) файл test1.w3x который можно открыть в обычном редакторе.
15)Вносим в карту изменения.
16)Открываем Vexorian Tool
17)(НУЖНО ДЕЛАТЬ ЛИШЬ ЕДИНАЖДЫ)Откроется окошко, ищем графу "Path to war3patch.mpq", под ней тыкаем Browse, и указываем путь к этому файлу, который находится в папке с варкрафтом.
18)После этого жмём Open, выбираем нашу карту, депротектченную после 10 шага
19)Жмём Save Omptimized As.
20)Получаем готовую, изменённую, оптимизированную карту.
. ВНИМАНИЕ.
RMPQex мог не найти некоторые файлы, это черевато тем, что в карте может отсутствовать часть импорта. Исправляется либо вручную, либо через w3mpqfns_p.
Кроме того, триггеры в этой карте(если вы хотите редактировать её в WE) примут джассовский вид(один сплошной код), и из-за конфликта некоторых функций(к примеру, переобъявления function main) сохранить карту в редакторе без правки или отключения всех старых триггеров вряд ли удастся.
Добавлено (29.08.2015, 23:08)
---------------------------------------------
1)Открываете DeSpazzler.
2)Снимаете защиту с карты
3)Переходите ко второму типу
1)Открываете MPQ Vew
2)Жмём Open data file и указываем листфайл
3)Жмём Open archive
4)Открываем папку с X-Deprotect
5)Кидаете туда листфайл(есть в прикреплённом архиве)
6)В директории с X-Deprotect создайте папку test.w3x.temp(зависит от имени карты, указанного в xdep.ini) а в ней же папку files
7)Извлеките туда все файлы из MPQVew-а
Далее всё как во втором типе с 13 шага.
. ВНИМАНИЕ.
В четвёртом типе RMPQex не работает. В этом случае, есть вероятность, что ОГРОМНАЯ доля импорта будет утеряна.
------------------------------------------------------------------------------------------------------------------------------
Итак, сегодня мы разобрали классификацию уровней защиты и методы их обхода.
В следующих уроках планируется рассмотреть темы:
+Вставка чит-паков
+парсинг листфайла с помощью w3mpqfns_p
+Классификация антисингла. Методы его устранения.
+парсинг .j файла на предмет различных интересностей(читов, багов, скрытых возможностей)
+Разбор Save\Load системы на предмет уязвимостей
+Работа с W3M Master-ом
+Ликбез по античитам
Читайте также: