Wake of Gods Forum | Форум Во Имя Богов
Исследования игрового формата карт - Printable Version

+- Wake of Gods Forum | Форум Во Имя Богов (http://wforum.heroes35.net)
+-- Forum: Герои Меча и Магии 3.5 WoG/ERA (/forumdisplay.php?fid=99)
+--- Forum: Карты (/forumdisplay.php?fid=183)
+--- Thread: Исследования игрового формата карт (/showthread.php?tid=1023)


Исследования игрового формата карт - MaGoth - 07.07.2011 23:13

Berserker,
Не могбы ты пояснить по какому принципу сортируются карты в игре, как их лучше и проще каталогизировать?

И еще один момент хотел бы у вас спросить, никто не планировал присобачить костыль или хук для Хиросов на предмет расшерения каталога maps, до вида как это реализовано в Хиросах 4?
Т.е. Чтобы можно было нормально систематизировать карты по их принадлежности к частям/дополнениям, примерно до такого вида:

...\Герои Меча и Магии III Полное собрание\Maps
\maps:
..\(RoE) - Restoration of Erathia
..\(AB) - Armageddon's Blade
..\(SoD) - Shadow of Death
..\(WoG) - in the Wake of Gods
..\(ТЕ) - Tournament Edition

Т.е. все карты и компании этих частей и типов изданий распаковать по соответствующим каталогам ?!
При большом объеме карт это хотя бы частично решило бы проблему вылетов с числом карт в каталоге больше предназначенного. Имхо.


Исследования игрового формата карт - hippocamus - 08.07.2011 00:08

Так ведь есть кнопки для фильтрации!..


RE: ERA II - MaGoth - 08.07.2011 00:17

hippocamus,
Фильтрации где, в игре?! А на кой эта убогая и кастрированная система нужна? Я немного про другое говорил, про каталоги ориентированные конкретно на определенный аддон, с предназначенным ему содержимым. Тогда часть проблемы с количественным содержимым в одном каталоге файлов разрешилась бы, хоть от части. Эта наверное проще реализовать, чем лохматить двиг на предмет поддержи например 30 000 карт в одном каталоге?!


RE: ERA II - hippocamus - 08.07.2011 00:22

Тогда лучше в ini-файле указывать перечень путей с допустимыми для аддона картами.
А для таких модов как Атлантис, 300 спартанцев, A Tribute to Warcraft - будет по 1 карте.


RE: ERA II - MaGoth - 08.07.2011 00:30

Да и еще, помощь треба по этому вопросу:

Нужны адреса где хранятся нужные значения, например, по адресу 0x000D в RescuingAsh(AB).h3m и [Ligue-AB] 22 - Envol des Behemoths.h3m одинаковое, а в Lucky Fate (AB).h3m другое. Вот что оно значит я без понятия.
Может ктонить эти моменты пояснить?

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


RE: Исследование героев - Berserker - 08.07.2011 00:48

   У меня определённый сжимающийся список для реализации, так что подобные предложения перенаправляю авторам плагинов и иным добровольцам. Моя задача выпустить относительно безбажную платформу, минимальный инструментарий и sdk в целях конкуренции с vcmi/wog для упрощения и стандартизации развития игры Sorry


RE: Исследование героев - MaGoth - 08.07.2011 00:56

Berserker,
а с адресами не подсобишь в плане пояснений ?

Зы, и все-же, возможность расширенного каталога для мапов, многим пришлась бы по душе. имхо.


RE: Исследование героев - etoprostoya - 08.07.2011 00:59

Quote:Нужны адреса где хранятся нужные значения, например, по адресу 0x000D в RescuingAsh(AB).h3m и [Ligue-AB] 22 - Envol des Behemoths.h3m одинаковое, а в Lucky Fate (AB).h3m другое. Вот что оно значит я без понятия.
Я вообще не понял, о чём ты спросил. Sm Идентификаторы принадлежности к аддону (RoE, AB, SoD, WoG)? Что-то другое?


RE: Исследование героев - MaGoth - 08.07.2011 01:10

etoprostoya,
Quote:Идентификаторы принадлежности к аддону (RoE, AB, SoD, WoG)?
да, мне нужно понять как двиг игры читает карты по их принадлежности к той или иной версии части игры. Где эти значения хранятся для каждой из частей и т.д. и т.п.


RE: Исследование героев - etoprostoya - 08.07.2011 01:17

Это самый первый байт. В Воге он 33h, в СоД - 1Ch.


RE: Исследование героев - MaGoth - 08.07.2011 01:24

etoprostoya,
Спасиб, а в остальных?
AB, RoE?


RE: Исследование героев - etoprostoya - 08.07.2011 01:26

15h - RoE, 0Eh - AB, видимо. Сейчас посмотрел.


RE: Исследование героев - MaGoth - 08.07.2011 01:28

Спасибо, будем ковырятся в коде далее. Sm


RE: Исследование героев - baratorch - 08.07.2011 08:32

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


RE: Исследование героев - etoprostoya - 08.07.2011 10:10

Quote: Длина Описание (код)

 4 Идентификатор формата
   0E 00 00 00 - RoE
   15 00 00 00 - AB
   1C 00 00 00 - SoD
   33 00 00 00 - WoG
 1 ??? Устанавливается в { 01 }, когда на карте присутствует хотя бы один герой.
 4 Высота и ширина карты в клетках (карта квадратная)
 1 0-Одноуровневая карта, 1-Двухуровневая
 4 Длина названия карты в байтах
 * Название карты
 4 Длина описания карты
 * Описание карты
 1 Сложность карты (0-Easy,1-Normal,2-Hard,3-Expert,4-Impossible)



RE: Исследование героев - MaGoth - 08.07.2011 13:14

baratorch,
Quote:у меня давно маячит мысля добавить в список сэйвов папки и возможность по ним переходить (дабл клик и кнопка "вверх"). Можно то же сделать и для списка карт. Но не знаю, найдется у меня на это время когда-нибудь
Вот какраз об этом я просил в теме, чтобы реализовали, а в купе с сортировщиком карт, + нормально реализованным инсталлером это было бы оч хорошим решением.
Нет желания начать действия/разработку в этом направлении?

etoprostoya, спасиб еще раз. Sm


RE: Исследование героев - FallenAngel - 09.07.2011 14:09

Такая вещь будет незаменима для судей разных турниров.


RE: Исследование героев - hippocamus - 11.07.2011 13:18

(08.07.2011 10:10)etoprostoya Wrote:   4 Идентификатор формата
   0E 00 00 00 - RoE
   15 00 00 00 - AB
   1C 00 00 00 - SoD
   33 00 00 00 - WoG

   1D 00 00 00 - Heroes Chronicles


RE: Исследование героев - AKuHAK - 13.08.2011 22:59

можно такой вопрос - как сделать чтобы карты из Хроник героев открывались в стандартном редакторе? Просто выдаёт вот такую ошибку Image: 1313258109-clip-11kb.jpg?nocache=1
Вот к примеру карта, буду очень благодарен, если будет указан адрес и правило, по которому надо его менять.


RE: Исследование героев - Berserker - 13.08.2011 23:19

Нужен редактор из хроник. Убрать проверку-то труда не составит, но если формат новый, то это грозит порчей карты.


RE: Исследование героев - etoprostoya - 13.08.2011 23:37

http://zalil.ru/31549674 - вот исправил карту, открывается редактором карт Дыхания Смерти. Там всего-то нужно было распаковать карту и исправить первый байт с 1Dh на 1Ch.
Сразу скажу, изменять и сохранять карту не пробовал.


RE: Исследование героев - AKuHAK - 14.08.2011 01:01

(13.08.2011 23:37)etoprostoya Wrote:  http://zalil.ru/31549674 - вот исправил карту, открывается редактором карт Дыхания Смерти. Там всего-то нужно было распаковать карту и исправить первый байт с 1Dh на 1Ch.
Сразу скажу, изменять и сохранять карту не пробовал.
Большое Спасибо!! Ещё вопрос - чем надо распаковывать?


RE: Исследование героев - etoprostoya - 14.08.2011 01:04

Это GZIP-архив, распаковывается, соответственно, его распаковщиками. Я распаковывал в тотал коммандере. ВинРар и 7z должны поддерживать этот формат, хотя и могут выдавать ошибки.


RE: Исследование героев - AKuHAK - 14.08.2011 01:08

(14.08.2011 01:04)etoprostoya Wrote:  Это GZIP-архив, распаковывается, соответственно, его распаковщиками. Я распаковывал в тотал коммандере. ВинРар и 7z должны поддерживать этот формат, хотя и могут выдавать ошибки.
ооо гигантское спасибо!!! вопросов пока больше не имею!!!


RE: Исследование героев - AKuHAK - 14.08.2011 02:19

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


RE: Исследование героев - Flashback - 14.08.2011 14:07

сейвы тоже сжаты в гзип и после распаковки их можно обратно не упаковывать, мб, и карты тоже можно не жать.


RE: Исследование героев - etoprostoya - 14.08.2011 14:22

Можно открыть карту в редакторе SoD и пересохранить: она автоматически упакуется.


RE: Исследование героев - AKuHAK - 14.08.2011 16:23

О, проделал исследование и выяснил, что карты и кампании сжаты в гзип без сохранения заголовков
Code:
gzip -n

   при распаковке и сжатии обратно файлы идентичны. Кстати, если запаковать без использования флага -n, то карта будет открываться в игре, только если мы не будем переименовывать файл.
Кампании сперва следует разбить на части, можно просто открыв в гекс редакторе и найдя gzip заголовки, я лично использовал H3RExtrator.exe, так как это намного быстрее. Потом можно при желании отредактировать карты, каждую запаковать при помощи команды выше и склеить их (например при помощи copy /b ...+...+... ...). При распаковке кампаний видно, что они построены весьма просто - сперва идут свойства всей миссии в целом, а затем уже тупо по очереди идут карты. К сожалению частенько после таких махинаций редактор кампаний отказывается открывать их, но ничего страшного - в игре никаких багов не наблюдается и кампании остаются вполне играбельными. Сейчас борюсь со свойствами всей миссии в целом...

upd Распакованные кампании не признаются игрой. Карты признаются.


RE: Исследование героев - hippocamus - 18.08.2011 21:46

А что - Хроники могут открывать карты?
Я знаю, что у них первый байт другой, 1D.
Вообще отличие этих карт от СОДовских вроде только в уменьшенном количестве героев (127?). И в наличии героя с именем Тарнум. В общем я точно не помню, но вроде в Хрониках нет никаких особых объектов, ни особых условий побед-поражений-переходов в кампаниях. Или есть? Просто самого интересует, я ведь редактор делаю.


RE: Исследование героев - etoprostoya - 18.08.2011 22:02

Новых каких-то объектов там нет, я даже лоды Хроник и Дыхания Смерти сравнивал: все объекты, что есть в Хрониках, есть и в Дыхании Смерти.
А там с Тарнумом? Он кого заменяет?


RE: Исследование героев - AKuHAK - 19.08.2011 01:22

В общем проделал ещё немного исследований и выяснил, что кампании полностью совместимы, если проделать некоторые изменения:
  • сперва разрезать каждую кампанию на 9 частей (ну кроме древа и луны), можно с помощью h3extractor'a, можно ручками найдя гзип сигнатуры;
  • распаковать все 9 частей;
  • во всех кроме первой заменить первый байт на
  • снова запаковать все карты с помощью gzip -n;
  • открыть первую карту (в редакторе карт) и поменять портрет Тарнуму, сохранить карту
    Вот этого кстати делать не надо - надо менять номера портретов вручную, редактор много отсебятины вносит.

    теперь самое сложное - редактирование собственно свойств кампании, для этого откройте её в гексе
  • первый байт меняем на 06 (07 кампании Хроник, 06 кампании клинка Армагеддона, дальше мне стало лень искать сигнатуры)
  • пятый байт меняем на 0D (это метка кампании Армаггеддон, каждая из стандартных шаблогов кампаний имеет свой номер). Насколько мне известно, только в ней 8 карт. У всех Хроник он равен 0, так как там в принципе нету этих миникарт с захваченными областями.
  • ищем по очереди названия карт (всякие там glory a.h3m), переименовываем наши карты соответственно в порядке распаковки (в принципе необязательный пункт, но желательный для полной идентичности).
  • !!!и наконец самый главный пункт - надо поменять размеры карт. Берём наше название (например glory a.h3m) опять находим его в коде и редактируем следующие 4 байта. Так как после редактирования даже одного байта и упаковки карты обычно меняют размер, то придётся его прописать заново. Например, если новый размер будет 11198 байт, то в гекс вписываем BE 2B 00 00. И так для каждой из карт.
  • сохраняем свойства кампании, упаковываем их с помощью gzip -n.
  • склеиваем все кусочки при помощи
    Code:
    copy /b ... + ... + ... out.h3m
  • Готово!
В принципе игра понимает и распакованные файлы, только тогда надо не забывать про прописывание размеров после названия карты (естественно, что для распакованных карт размеры возрастут). То есть по идее можно вставить и распакованные файлы карт, да и свойства кампании не паковать. Только надо учесть, что кампания хоть и отлично откроется в редакторе карт, но после сохранения свойства кампании сожмутся (карты останутся распакованными).
С Тарнумом вообще дело тёмное. Если открыть первую карту в редакторе и тут же сохранить её, то обнаружится, что 12 байтов связанных с Тарнумом и Рабаком изменились по непонятным причинам. Карта по прежнему не загрузится, поскольку игре нужны не эти непонятные 10 байтов, а "легальный" портрет Тарнума. Портрет вообще хранится в другом месте и занимает ровно два байта, если отредактировать его вручную и не трогать эти непонятные 10 байтов, то карта превосходно загружается. К сожалению надо тестировать не произойдёт ли чего плохого во время геймплея, а это долго и нудно. Так что по идее можно сократить количество изменённых байтов ещё на 12 штук. Итого набирается 12 байтов обязательных и ещё где-то 16 байт на размеры карт.
Вот кому интересно, может глянуть http://zalil.ru/31574865, я пока не нашёл подвоха.
На выходных выложу хроники. Кстати интересно нельзя ли расширить список портретов вместо того чтобы тупо заменять уже существующие?
upd - в хрониках же наоборот больше портретов или я что-то путаю?


RE: Исследование героев - hippocamus - 19.08.2011 02:01

Портретов больше, героев меньше?
Тарнум заменяет вроде первого из героев кампании СОД.
Хотя я не уверен.


RE: Исследование героев - baratorch - 19.08.2011 08:38

AKuHAK, спасибо большое, очень полезная информация. Давно хочу сделать пак для ХД, полноценно добавляющий хроники в СоД.


RE: Исследование героев - AKuHAK - 19.08.2011 21:46

http://zalil.ru/31578703
Вот хроники героев практически идентичные, с самыми минимальными изменениями. Номера портретов уменьшены на 0Е. Тарнум в каждой кампании заменяет нового героя (это в хрониках так, это не моё творчество) )) По поводу редактора карт он меняет все карты хроник по одинаковому, так что я менял только портреты. Заголовок кампании распакованный, а карты упакованные.


RE: Исследование героев - AKuHAK - 10.09.2011 22:20

Вопрос - никто не знает, где хранятся координаты кусочков карты показываемой перед кампанией? Вот например здесь Image: 04611e1cabc6t.jpg
К примеру я узнал, что координаты левого верхнего угла "верхнего" острова 170 пикселей от верхнего края и 55 пикселей от левого, в каком виде это хранится в игре? Мне бы хотя бы гекс отображение.


RE: Исследование героев - solitaire345 - 14.09.2011 22:14

(10.09.2011 22:20)AKuHAK Wrote:  Вопрос - никто не знает, где хранятся координаты кусочков карты показываемой перед кампанией? Вот например здесь Image: 04611e1cabc6t.jpg
К примеру я узнал, что координаты левого верхнего угла "верхнего" острова 170 пикселей от верхнего края и 55 пикселей от левого, в каком виде это хранится в игре? Мне бы хотя бы гекс отображение.

The pointers for campaign areas are at 0063BC50. Each entry points to tables for each campaign map. Each table holds n structures, where n is number of scenarios in particular campaign map. The structures are like this:
Code:
00000000 X               dd ?
00000004 Y               dd ?
00000008 Enabled_Red     dd ?
0000000C Enabled_Blue    dd ?
00000010 Enabled_Tan     dd ?
00000014 Enabled_Green   dd ?
00000018 Enabled_Orange  dd ?
0000001C Enabled_Violet  dd ?
00000020 Enabled_Teal    dd ?
00000024 Enabled_Pink    dd ?
00000028 Selected_Red    dd ?
0000002C Selected_Blue   dd ?
00000030 Selected_Tan    dd ?
00000034 Selected_Green  dd ?
00000038 Selected_Orange dd ?
0000003C Selected_Violet dd ?
00000040 Selected_Teal   dd ?
00000044 Selected_Pink   dd ?
00000048 Completed_Red   dd ?
0000004C Completed_Blue  dd ?
00000050 Completed_Tan   dd ?
00000054 Completed_Green dd ?
00000058 Completed_Orange dd ?
0000005C Completed_Violet dd ?
00000060 Completed_Teal  dd ?
00000064 Completed_Pink  dd ?

X and Y are coordinates, other entries are addresses of image file names.


RE: Исследование героев - Sav - 25.09.2011 22:57

Кто-нибудь знает, что делает воговский хук на адрес 0x04C4141 (вернее, с этого места начинается правка, а сам хук чуть дальше)? Неужели только исключает из списка карт карты с идентефикатором, большим 0x33?


RE: Исследование героев - Berserker - 26.09.2011 00:36

// проверка на защищенную карту
{0x4C4143,0,DP(LoadProtected)}

Содержимое функции - чистый асм. Насколько я помню, кто-то делал прогу для типо-защиты карт от просмотра в редакторе и некорретный тип карты должен правиться на лету для загрузки.


RE: Исследование героев - Sav - 26.09.2011 02:18

Ясно, спасибо.


RE: Исследование героев - hippocamus - 02.10.2011 15:14

Ага, там случайное количество мусора вначале вставлялось. Так без хука эти карты не открываются? Тогда всё ясно, а то я в шоке был, когда эти карты увидел, думаю - это ж надо что герои такой эвристикой обладают! И наверное это не просто мусор, а ассемблерный код?


RE: Исследование героев - Berserker - 02.10.2011 15:23

Я бы предположил мусор с где-то указанной длиной.


RE: ERA II - hippocamus - 28.11.2013 21:10

С тех пор, как ХотА сменил идентификаторы своих карт (30 и 32 теперь десятичные, 30 идентично содовскому) - Эра крэшится при входе в меню выбора карт. Раньше они отлично дружили в одной папке, и ничто им не мешает и сейчас мирно сосуществовать, кроме этой реакции. Нельзя ли это исправить? ХотА, например, игнорирует карты ВОГ и МОП, как и любые другие с неизвестным идентификатором.
Боюсь, что та же проблема будет с сохранениями.


RE: ERA II - Berserker - 28.11.2013 21:45

Вылетает никто иной, как СоД. В крайнем случае ВоГ. Прости, Хиппо, но пусть энтузиасты ищут место, где идёт сравнение версий и нехорошие действия. Тут и своих проблем хватает. Если программисты Хоты научили игру не вылетать, пусть они и делятся соответствующими заплатками, чтобы хотовские карты адекватно воспринималиь другими версиями игры.


RE: ERA II - hippocamus - 28.11.2013 21:56

Ясно, спрошу у Сава.


RE: ERA II - Sav - 28.11.2013 22:08

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


RE: ERA II - Berserker - 28.11.2013 23:14

    {0x4C4143,0,DP(LoadProtected)},
{0x5849C7,0x0,DP(CheckFileTypeN)},
Записал на следующий выпуск.

32 используется вогом (1C).
#define SODMAPTYPE 0x1C


RE: ERA II - Sav - 28.11.2013 23:24

32 это 0x20 вообще-то) 0x1C - это содовский формат и есть.


RE: ERA II - Berserker - 28.11.2013 23:55

Да, ошибся. Нужно чтобы Все, кроме воговских защищённых карт и 32 игнорировались, так?


RE: ERA II - Sav - 29.11.2013 00:08

По идее нужно, чтобы все форматы, которые не равны 14 (рое), 21 (аб), 28 (сод) и воговского (или воговских если их несколько) - не включались в список карт, то есть обрабатывались так же, как форматы > 28 в Соде. Отдельной проверки для Хоты не должно быть нужно.
Я не знаю, как работает этот алгоритм защиты карт и что вообще правил Вог. Если он просто бинарными патчами исправил все проверки на > 28 на воговский формат - то я могу дать хотовский код увеличения количества поддерживаемых форматов, которым эти правки можно заменить. В ином случае надо копать что-то в самом Воге и либо править там, либо убедиться, что все проверки формата происходят в коде оригинала.


RE: ERA II - Berserker - 29.11.2013 00:17

Я сделаю, как ты написал выше (14, 21, 28 + воговские).


RE: ERA II - hippocamus - 29.11.2013 19:59

29 и 30 можно включить в принципе.
29 это Хроники, 30 это старый хота, который по формату ничем не отличается от сод, а значит и грузиться будет, если нужные дефы есть в лодах (как и в случае с вог, впрочем).


RE: ERA II - GrayFace - 29.11.2013 21:42

А Хроники разве совместимы?
Вот эта проверка:
{0x4C415E,DS0(0x73),1}, // переходы (>=0x1C, а не =0x1C)


RE: ERA II - Berserker - 30.11.2013 02:41

Компании хроник вроде играются, хотя не в курсе, какая там версия карт.


RE: ERA II - AKuHAK - 30.11.2013 04:05

Кампании хроник может и играются - но в них используются герои с номерами за пределами ранга (137-143). Тип карт - 29 (как уже написали), тип кампании - 07 (06 - СОД, 05 - АБ,...), тип подкомпании - 00.

Помнится у меня просто появлялся вместо тарнума пустой герой без картинки и с нулевыми статами. Что меня удивило игра вылетать и не думала ))


RE: ERA II - fireman - 27.01.2014 16:10

(26.01.2014 01:03)Berserker Wrote:  Заплатка, умоляющая Хотовские карты пощадить старика ВоГа. Роешные карты могут пошаливать при этом, не проверял.

Файл пихать в папка_с_игрой\Mods\WoG\EraPlugins\AfterWoG . Роешные загружаются, где именно краш может быть?


RE: ERA II - Bes - 27.01.2014 17:29

(26.01.2014 01:03)Berserker Wrote:  Заплатка, умоляющая Хотовские карты пощадить старика ВоГа..
Патч, устраняющий вылет ERA при наличии в игровой папке "Maps" карт HotA 1.3.x
Download
Тип: Мод для ERA
Размер: 97 КБ


RE: ERA II - hippocamus - 02.02.2014 00:07

Респект за игнор ХотА карт!


RE: ERA II - Berserker - 02.02.2014 01:34

Да уж, неудачно для простого патча вышла версия карт у Хоты. 32 против 33 у вога и меньших у сода )


RE: ERA II - hippocamus - 04.02.2014 23:45

У Вога 51 ведь! А у хоты был запланирован идентификатор 56 (чтоб после Вога, и потому что в оригинале все кратны 7). Но Сав взял 29, который потом срочно переправили на 30, ибо 29 это Хроники. 31 был техническим, 32 закрепился.
30 используется и сейчас, это формат СОД, но с хотовскими объектами. По идее его можно не игнорировать, интерпретировать как ВОГ.


RE: ERA II - Berserker - 05.02.2014 01:13

В любом случае Хотовский больше содовского, но меньше воговского. Такую сложную проверку двоичным патчем не сделать.


RE: Исследование героев - Berserker - 14.07.2019 23:59

Формат файлов кампаний:

Code:
Heroes 3 Campaign (h3c) format after unpacking (gz).
=================================
byte    = 1 byte (0..255)
word    = 2 bytes (0..65535)
integer = 4 bytes (-2147483648..2147483647)
boolean = 1 byte (0 = false, 1 = true)
---------------------------------
const
  (* Hardcoded in camptext.txt, differs for each campaign index. Number of zones in current campaign *)
  NUM_ZONES = ?;

var
  Header: THeader;
  Zones:  array NUM_ZONES of TZone;
  Maps:   array NUM_ZONES of TMap | None;

type
  TString = record
    Length: integer;
    Value:  array Length of char;
  end;

  THeader = record
    GameVersion:             integer = 5 (Armageddon Blade) | 6 (WoG);
    CampaignInd:             byte; // Index of campaign (from 0), see camptext.txt
    CampaignName:            TString;
    CampaignDesc:            TString; // Description
    UserCanSelectDifficulty: boolean;
    MusicTheme:              byte;
  end; // THeader

  TZonePrologue = record
    HasPrologue: boolean;

    if HasPrologue then
      VideoId: byte;
      MusicId: byte;
      Text:    TString;
    end;
  end;

  TZoneEpilogue = record
    HasEpilogue: boolean;

    if HasEpilogue then
      VideoId: byte;
      MusicId: byte;
      Text:    TString;
    end;
  end;

  TStartingOpts = record
    OptsType: byte; // StartingBonus = 1, CrossoverHero = 2, InitialHero = 3

    if OptsType = 1 then
      PlayerColor: byte;
      NumBonuses:  byte;
      Bonuses:     array NumBonuses of record
        BonusType: byte;

        if Bonuses = 0 (spell) then
          Hero:  word; 65023 for most powerful hero
          Spell: byte;
        end;

        if Bonuses = 1 (creature) then
          Creature: word;
          Number:   word;
        end;

        if Bonuses = 3 (artifact) then
          Hero: word;
          Art:  word;
        end;

        if Bonuses = 4 (spell scroll) then
          Hero:  word;
          Spell: byte;
        end

        if Bonuses = 5 (primary skills) then
          Hero:       word;
          PrimSkills: array 4] of byte;
        end;

        if Bonuses = 6 (secondary skill) then
          Hero:     word;
          SecSkill: byte;
          Level:    byte;
        end;

        if Bonuses = 7 (resource) then
          Resource: byte;
          Quantity: integer;
        end;
      end; // Bonuses
    end; // if

    if OptsType = 2 then
      PlayerColor: byte;
      ZoneIndex:   byte;
    end;
  end; // .TStartingOpts

  TZone = record
    FileName:           TString;
    FileSize:           integer;
    RequiredZones:      byte; // Zone prerequisites; bitmask: 1 bit for each zone
    ZoneColor:          byte;
    DifficultyLevel:    byte;
    RegionRmbText:      TString; // Right mouse button hint
    Prologue:           TZonePrologue;
    Epilogue:           TZoneEpilogue;
    HeroesRetain:       byte; // Bitmask of Experience (bit 0), Primary Skills (bit 1), Secondary Skills (bit 2), Spells (bit 3), Artifacts (bit 4)
    CrossoverCreatures: array of 19 bytes; // 1 bit for every creature. Creature ID: 0..159
    CrossoverArts:      array of 18 bytes; // 1 bit for every artifact. Artifact ID: 0..143
    StartingOpts:       TStartingOpts;
  end;

  TMap = unpacked h3m (gz) map



RE: Вопросы по моддингу - feanor - 27.04.2021 12:39

Слушайте, а кто-нибудь занимался добавлением/редактированием карт кампаний? Ну, на всякий случай, чтобы лишнюю работу не делать?

(И да, таблицу я нашел, только к таблице не всё сводится)


RE: Вопросы по моддингу - daemon_n - 27.04.2021 14:19

feanor, я занимался, если ты говоришь о простом изменении.

Просто извлекаем карты через редактор кампаний, затем редачим в редакторе карт, затем обратно упаковываем.

Если не оно, то иду дальше мимо 105


RE: Вопросы по моддингу - feanor - 27.04.2021 16:17

Ээ, нет.
Имеются в виду те карты, которые сбоку. Раскладки, шаблоны, черт его знает, как их назвать.

Интересует изменение количества карт в шаблоне и добавление новых, в первую очередь.


RE: Вопросы по моддингу - XEPOMAHT - 27.04.2021 17:29

(27.04.2021 16:17)feanor Wrote:  Интересует изменение количества карт в шаблоне и добавление новых, в первую очередь.

Номер шаблона меняешь и дозапаковываешь новые карты. Максимум - 12 карт на кампанию, если скляроз не изменяет.


RE: Вопросы по моддингу - feanor - 28.04.2021 11:36

Ээ, а смысл, если можно просто сделать сразу в нужном?
Дело в том, что в стоке шаблон с 11 картами один, кажца, а нужно два минимум.
Quote:Максимум - 12 карт на кампанию, если скляроз не изменяет.
11, кажется, где-то в SoD.
А технически, наверное, 16, там битовое поле двухбайтовое.

Ладно, понял.
Просто я расширяю таблицу, копирую данные, меняю индекс в файле кампании, а оно вылетает, причем где-то в совершенно иррелевантном месте. И даже если делаю то же c существующим слотом (копирую данные от другого шаблона с другим количеством карт) - та ж фигня.
То ли там еще какая-то таблица/свитч, то ли что-то пошло не так.


RE: Вопросы по моддингу - XEPOMAHT - 28.04.2021 14:40

(28.04.2021 11:36)feanor Wrote:  Просто я расширяю таблицу, копирую данные, меняю индекс в файле кампании, а оно вылетает, причем где-то в совершенно иррелевантном месте. И даже если делаю то же c существующим слотом (копирую данные от другого шаблона с другим количеством карт) - та ж фигня.
То ли там еще какая-то таблица/свитч, то ли что-то пошло не так.

Проще добавить собственный диалог кампаний на DL например (в MoP хоть 100 новых диалогов в главное меню суй - игра с ними работает без проблем с помощью WERD), нежели пытаться пропатчить существующий (там выделяется стековая память на данные диалога + традиционные захардкоренные геройские _dlg_-структуры с адресами на загрузку/выгрузку/уничтожение и т.д., лично я такие штуки стараюсь не трогать).