Гипат.org

MODный форум - Формат .mpr

Firestar - 12 октября 2009, 20:31
Существуют ли какие-нибудь утилиты для работы с mpr-файлами?
Если не editor, то хотя бы viewer.
На gipat.ru когда-то выкладывали программу для просмотра mpr, но сейчас она не доступна. (вот скрин подобной проги)

Что известно об mpr-файле: содержит ландшафт зоны и граф проходимости. Распаковывается EIEdit'ом, включает в себя один файл .mp и много .sec.
EviL|Alpha - 13 октября 2009, 17:31
Вот он, чтобы посмотреть *.mpr файл нужно распаковать его ResBuild'ом и загрузить файл *.mp, не путай с файлом, в котором хранится информация о персонаже в мультиплеере.
Firestar - 13 октября 2009, 17:46
Спасибо :) А именно редактор для mpr существует?
Sagrer - 13 октября 2009, 19:08
Открытого редактора не существует насколько знаю.

у нас есть свой редактор, но редактировать сам рельеф в нём _нормально_ невозможно, только кое-как редактировать текстуры. А ещё его дико глючит.

Ещё у нас есть плагин для 3D-MAX - вот им в принципе можно наваять рельеф, но в нём пока что тоже есть очень серъезные недоработки. Собсно когда дойдут руки возможно я приведу исходники в порядок и выложу это дело, на тех же примерно условиях что и MobSurgeon. Случится это не раньше нового года. Пока что не просите даже ничего - оно глючное и неюзабельное, даже если кто-то захочет пересобрать это дело из исходника - они наверняка полезут ко мне с вопросами, заниматься ответами на которые мне на данный момент ну совершенно некогда %).
Снайпер - 15 октября 2009, 08:08
А я ещё "подкину" машинного масла в огонь: граф проходимости прописан не в mpr'ке, а в зональном мобе в виде блока AIGraph. И учитывает он, вообще говоря, и объекты этого самого зонального моба. А ещё, в мобе у рычагов есть поле "RecalcGraph" или как-то так - оно отвечает за то, грубо говоря, является ли рычаг дверью. А ещё... Впрочем, достаточно. Формат mpr где-то был в каком-то документе, но я не вижу смысла его сейчас поднимать - всё равно никто пока не изъявил желания щото программировать...
visor - 06 февраля 2010, 19:48
Цитата (Снайпер):
А я ещё "подкину" машинного масла в огонь: граф проходимости прописан не в mpr'ке, а в зональном мобе в виде блока AIGraph. И учитывает он, вообще говоря, и объекты этого самого зонального моба. А ещё, в мобе у рычагов есть поле "RecalcGraph" или как-то так - оно отвечает за то, грубо говоря, является ли рычаг дверью. А ещё... Впрочем, достаточно. Формат mpr где-то был в каком-то документе, но я не вижу смысла его сейчас поднимать - всё равно никто пока не изъявил желания щото программировать...

Уже нашлись такие. Проект Cursed Earth. О формате MPR очень много говорилось в этой теме в Городе Джунов.
Снайпер, если знаешь ещё какие-нибудь хитрые штучки, расскажи. Будь уверен, однажды это пригодится! :)
Снайпер - 06 февраля 2010, 23:09
Visor, если вспомню ещё чего интересное - напишу, ага...
visor - 14 февраля 2010, 11:27
Цитата (Снайпер):
...граф проходимости прописан не в mpr'ке, а в зональном мобе в виде блока AIGraph. И учитывает он, вообще говоря, и объекты этого самого зонального моба. ...

На затравку: после начального реверсинга я почти уверен, что граф не учитывает объекты моба... После того, как стала ясна структура, я менял значения - никакого эффекта на объекты графа - только краши при указании за "доступную" область игровой зоны. Сейчас пока разбор отложен - это не приоритетная задача.
Снайпер - 14 февраля 2010, 12:41
А чем ты, если не секрет, пересчитывал граф? Собственный алгоритм? :)

Не знаю, Нивальский инструмент требует не только зонального моба, но и базу данных, чтобы просто пересчитать граф. Да и рычаги-двери вроде бы содержат поле NeedRecalcGraph (LeverIsDoor)... Может, конечно, я не прав - ибо никакого реверсинга делать не умею, и даже отдалённо не представляю, что это такое...
visor - 14 февраля 2010, 20:33
Цитата (Снайпер):
А чем ты, если не секрет, пересчитывал граф?

Да какие секреты :) Настоящим реверсингом с помощью утилит я тоже не владею, но видимо скоро придётся научиться))))
У графа есть определённая структура. Через n часов втыкания в монитор вырисовывается. Это или набор цифр, или матрицы, и всё это повторяется в цикле. Но это не суть, т.к. что скрывается за этими цифрами - непонятно. Если кто-нибудь хочет продолжить сейчас, могу описать структуру.
Я попробовал тупо изменить всё значения, например, на единицы (в любом hex редакторе, смещения нам все известны). Эффекта - 0. Зак как обходил, так и обходит все препятствия. К сожалению, забыл посмотреть, может ли он забраться в гору после этого. Если щёлкнуть за пределы зоны - краш. На этом пока всё.
Снайпер - 15 февраля 2010, 01:39
Ясно... В общем, велик и загадочен мир ПЗ. Такие иногда "сурпризы" оказываются...
ERaserkry - 15 февраля 2010, 12:11
по поводу Cursed Earth блин был бы прикольным подарок от нивала в виде открытия каких нибудь исходников... ПЗ к примеру)))))
Sagrer - 15 февраля 2010, 12:49
Цитата:
Зак как обходил, так и обходит все препятствия.


на коротких дистанциях проходимость считает движок, динамически! Граф используется только при поиске пути на большом расстоянии!!!
ERaserkry - 15 февраля 2010, 13:27
2 мини вопроса
короткая дистанция это сколько?

Да и вообще вопрос.... почему выстрелами черт знает откуда противники агрятся и бегут за тобой?
Можно ли их поведение сменить на типа... стрельнули отттуда...мы пришли а там и никого пошли обратно?
Снайпер - 15 февраля 2010, 14:21
Цитата (ERaserkry):
2 мини вопроса
короткая дистанция это сколько?

Да и вообще вопрос.... почему выстрелами черт знает откуда противники агрятся и бегут за тобой?
Можно ли их поведение сменить на типа... стрельнули отттуда...мы пришли а там и никого пошли обратно?

1. С темой знаком плохо, но подозреваю что короткая дистанция - это в пределах сектора. Сектор - квадрат в 32 игровых метра (33 вершины на сторону).

2. Особенности движка - выстрел воспринимается как атака со стороны некоего объекта, а то, что он в некоторых случаях приходит ХЗ откуда - это другой вопрос... Да, я бы тоже хотел, чтобы враги "наводились" в лучшем случае на точку выстрела, и могли "отстать", как в Аллодах.

Почему никого не смущает на этом фоне то, что при телепортации мага куда-нибудь за спину лучнику, уже выпущенная в него стрела разворачивается и летит (иногда через голову лучника и через стены/горы) в свою изначальную цель и всё-таки попадает?..
Aleks - 15 февраля 2010, 16:15
Цитата (Снайпер):
Почему никого не смущает...

Это же особенный, магический мир™. :) Modern Warfare 2 Mythbusters.
Sagrer - 15 февраля 2010, 17:41
Цитата:
короткая дистанция это сколько?


я без понятия сколько именно, никогда не приходило в голову измерять, но можно взять моб в котором нет графа (на основе любого квестовго моба, которые обычно добавляются через addmob, мультиплеерные мобы квестов туда же) - то достаточно тупо потыкать идти вдаль и посмотреть докуда реально будет работать поиск пути.

А если на глазок - то там по длине действительно что-то похожее на сторону квадрата-сектора.
visor - 15 февраля 2010, 21:52
Цитата (Sagrer):
на коротких дистанциях проходимость считает движок, динамически! Граф используется только при поиске пути на большом расстоянии!!!

Ну вот и понятен краш теперь. Да, 1 или 2 сектора - это уже не короткое расстояние.
По поводу реверсинга. Мне видится 2 пути - ковыряние в asm и эксперименты путём замены значений. Я думаю начать со 2-го. Кто что подсказать ещё сможет?
Sagrer - 16 февраля 2010, 01:16
Цитата:
Кто что подсказать ещё сможет?


попытаться установить соответствие между размером карты и цифрами в графе - ибо там, возможно, что-то вроде этакой картинки только вместо пикселей - инфа о том проходим ли данный кусок карты... а вообще я лично разбор начинаю с попытки найти сигнатуры и размеры блоков - в ПЗ-шных ресурсах размеры блоков обычно 4 байта и идут перед самим блоком. Самое простое - посмотреть размер исследуемого файла (или в данном случае куска файла) и поискать сходное значение в первых двух десятках исследуемых байтов. Когда только начинал и вообще ничего не умел (изучал формат базы данных) - просто открывал хекс-редактором файлики и медитировал... потом начал выделять блоки по 2-4 байта и смотреть каким значением оно может быть в int-ах или float-ах, так и нашёл первые закономерности, дальше было уже намного легче - размоталось как клубок ниток %).
visor - 16 февраля 2010, 22:11
Цитата (Sagrer):
а вообще я лично разбор начинаю с попытки найти сигнатуры и размеры блоков - в ПЗ-шных ресурсах размеры блоков обычно 4 байта и идут перед самим блоком. Самое простое - посмотреть размер исследуемого файла (или в данном случае куска файла) и поискать сходное значение в первых двух десятках исследуемых байтов.

Со структурой всё понятно, это цельный блок, подблоков нет - после заголовка идёт поток матриц. Здесь, я думаю, это оффтоп. Может сделать новую тему, относящуюся к мобу? Там бы я описал структуру и в путь...
Цитата (Sagrer):
попытаться установить соответствие между размером карты и цифрами в графе - ибо там, возможно, что-то вроде этакой картинки только вместо пикселей - инфа о том проходим ли данный кусок карты...

На первый взгляд там нечно посложнее...
ERaserkry - 18 февраля 2010, 09:22
* The following people assist in the Cursed Earth development process:

Sagrer <sagrer at yandex.ru>
Altair <altair at konkovo.net>

вот он скромный труд опенсоурса))))


поправил мыло (Sagrer)

Sagrer - 18 февраля 2010, 13:13
вот только в открытом виде мылы не надо выкладывать плз, зачем лишний раз в базы спаммеров попадать?

Цитата:

Со структурой всё понятно, это цельный блок, подблоков нет - после заголовка идёт поток матриц. Здесь, я думаю, это оффтоп. Может сделать новую тему, относящуюся к мобу? Там бы я описал структуру и в путь...


Тему как хочется, можно и создать - только это не совсем формат моба, граф может лежать отдельно в файлике *.grp с именем таким же как и у моба - если при этом в самом мобе графа нет - движок подхватывает из файлика.
visor - 18 февраля 2010, 23:03
Цитата (Sagrer):
вот только в открытом виде мылы не надо выкладывать плз, зачем лишний раз в базы спаммеров попадать?

Адреса написал исключительно потому, что они есть в шапках многих исходников (Mob Surgeon, например). Или в файлах ReadMe (ei model viewer).
2sagrer: как лучше написать?

Цитата (Sagrer):
Тему как хочется, можно и создать - только это не совсем формат моба, граф может лежать отдельно в файлике *.grp с именем таким же как и у моба - если при этом в самом мобе графа нет - движок подхватывает из файлика.

Ага! Я видел пару таких файлов, теперь понятно что это.

Попробую на днях описать всё словами (тяжело это у меня выходит...) и куда-нибудь запостить.
Снайпер - 18 февраля 2010, 23:16
[offtop]
Цитата (visor):
Адреса написал исключительно потому, что они есть в шапках многих исходников (Mob Surgeon, например).

Во, точняк, надо будет дописать в спам-ботов-грабберов функцию закачки исходников и поиска в хедерах и коде контактных данных разрабов... :) [/offtop] Я что, я вообще ничего...
Sagrer - 18 февраля 2010, 23:33
просто боты уж точно сканируют форумы на предмет мылов, а насчёт исходников - вероятность как минимум меньше %).
ERaserkry - 19 февраля 2010, 02:50
оффтоп

У меня мыло вообще на мейле.. но ничего мозилла справляется.. спам режем....Да его и нету то толком...
visor - 20 февраля 2010, 23:15
Цитата (visor):
Попробую на днях описать всё словами (тяжело это у меня выходит...) и куда-нибудь запостить.

не оффтоп))

Чего тут думать - пишу здесь же. Сам формат разобран на gipat.ru, наполним же жизнью эту ветку)

Итак, структура данных в блоке с графом (ID_AIGRAPH в mob reversing tool). Только структура, в значении ещё предстоит разобраться.

1
После стандартных 8-ми байтов (сигнарута и длина блока) идут ещё 2 dword. Сразу стало видно, что это кол-во секций в mpr умноженное на 8 (то бишь mpr_section_x_count * 8 и mpr_section_z_count * 8). Почему на 8? Спросите чего полегче. Но я заметил, что некоторые наборы чисел сгруппированы по 8 (по строкам, столбцам или по тому и по другому).
magic1 = mpr_section_x_count * 8
magic2 = mpr_section_z_count * 8

2
Следом идут mpr_section_x_count матриц 8 x 8

3
А потом начинается цикл. В цикле:

3.1
4 * mpr_section_x_count каких-то чисел.

3.2
1 матрица mpr_section_x_count x 8

3.3
1 матрица magic1 x 8

4
В конце хвост - mpr_section_x_count x 12 неких чисел.

Вот некоторая статистика (изв. за копипаст, sz - размер данных графа):
// zonemenu 2x2 38912 sz, 127 loops, 304 b per loop, 48 b tail
// bz8k 4x4 155648 sz, 255 loops, 608 b per loop, 96 b tail
// zone2 4x6 233472 sz, 383 loops, 608 b per loop, 96 b tail
// zone20 5x5 243200 sz, 319 loops, 760 b per loop, 120 b tail
// zone6lmp 7x12 817152 sz, 767 loops, 1064 b per loop, 168 b tail
// zone1 8x6 466944 sz, 383 loops, 1216 b per loop, 192 b tail
// zone8 11x11 1177088 sz, 703 loops, 1672 b per loop, 264 b tail
// zone7 15x10 1459200 sz, 639 loops, 2280 b per loop, 360 b tail
// zone11 16x12 1867776 sz, 767 loops, 2432 b per loop, 384 b tail

И пример. Возьмём zonemenu, она маленькая.

---1 magic1, magic2---

16 16

---2---

-1 -1 -1 -1 41 45 45 -1
-1 -1 45 87 64 112 64 -1
-1 -1 64 90 112 103 64 -1
-1 -1 64 153 67 90 64 -1
-1 -1 64 87 64 95 67 -1
-1 -1 67 87 56 87 64 -1
-1 -1 64 87 56 87 64 -1
-1 -1 64 87 56 87 64 -1

-1 -1 64 87 56 87 64 -1
-1 -1 64 87 56 87 64 -1
-1 -1 64 87 56 91 105 -1
-1 -1 105 113 45 129 175 -1
-1 -1 175 156 45 45 57 -1
-1 -1 57 103 62 75 48 -1
-1 -1 48 87 56 87 73 -1
-1 -1 73 77 32 -1 -1 -1

---3.1 loop 1---

13175 13107 17203 17219 17219 30531 17783 29507


---3.2 loop 1---

1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1

---3.3 loop 1---

41 -1 -1 -1 64 87 56 87
64 45 56 87 64 90 53 90
112 112 53 53 41 247 165 153
67 103 165 207 81 87 56 87
64 90 56 85 64 90 64 87
56 95 64 90 64 90 64 87
56 87 64 90 64 90 64 87
56 87 64 90 64 90 64 87
56 87 64 90 64 90 64 87
56 87 64 90 64 90 64 87
56 87 64 90 64 163 99 113
45 91 99 163 64 95 111 156
45 129 111 104 64 90 64 103
62 45 64 90 64 90 64 87
56 75 64 90 64 95 64 77
32 87 64 95 64 -1 -1 -1

...

---3.1 loop 127---

30003 13140 13107 20531 30548 4113 13125 28723


---3.2 loop 127---

27 22 22 22 22 22 22 22
2 28 2 2 2 2 29 30

---3.3 loop 127---

-1 -1 -1 -1 -1 -1 -1 -1
38 -1 -1 -1 -1 -1 15 98
82 53 15 -1 -1 -1 127 208
99 78 127 -1 -1 -1 128 209
99 113 128 -1 -1 -1 127 209
99 112 127 -1 -1 -1 127 209
99 111 127 -1 -1 -1 120 146
63 109 120 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1
15 -1 -1 -1 -1 -1 15 -1
-1 22 15 -1 -1 -1 149 -1
-1 -1 149 -1 -1 -1 -1 -1
73 659 -1 -1 -1 -1 93 103
93 153 93 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1
15 -1 -1 -1 -1 -1 -1 -1

---4---

1843 0 0 0 1843 512 1287 51 31 22 22 22
22 22 22 22 32 28 28 28 2 2 33 30

Усё, мы в конце файла))
visor - 20 февраля 2010, 23:24
Цитата (visor):
...

Да, совсем забыл - magic1,2 имеют тип dword, как я и говорил, а все остальные числа - word, вернее signed short int, 2 байта.
Часовой пояс: GMT +4:00
Форумы Поселка созданы на базе phpBB2 2.0.4 © phpBB Group