Объявления

Друзья, если не получается зарегистрироваться, напишите на почту vdv_forever@bk.ru.
Я оторву свою задницу от всех дел и обязательно Вас активирую! :smile10:
Добро пожаловать на геройский форум! :smile25:

Формат сейвов

Не запускается игра? Проблемы со звуком? Где, в конце концов, взять игру, скачать патчи, приложения и карты? Как установить все это? Все проблемы обсуждаем в этом разделе
offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5518
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2147 раз.

Re: Формат сейвов

Сообщение AlexSpl » 29 апр 2019, 17:51

О структуре клеток карты TTile...

Таблица 1. Тайлы ландшафта и объектов ландшафта

TIL nameКол-во кадров (d)ОписаниеКадры
GROUND32.TIL124Тайлы ландшафтаGROUND32.TIL.pdf

ICN ID (h)ICN nameКол-во кадров (d)ОписаниеКадры
00OBJ32-00.ICN741-я группа тайлов: тайлы объектов водного ландшафта00 - OBJ32-00.ICN.pdf
01OBJ32-01.ICN1242-я группа тайлов: тайлы объектов травяного ландшафта01 - OBJ32-01.ICN.pdf
02OBJ32-02.ICN373-я группа тайлов: тайлы объектов снежного ландшафта02 - OBJ32-02.ICN.pdf
03OBJ32-03.ICN354-я группа тайлов: тайлы объектов болотного ландшафта03 - OBJ32-03.ICN.pdf
04OBJ32-04.ICN955-я группа тайлов: тайлы объектов лавового ландшафта04 - OBJ32-04.ICN.pdf
05OBJ32-05.ICN356-я группа тайлов: тайлы объектов пустынного ландшафта05 - OBJ32-05.ICN.pdf
06OBJ32-06.ICN417-я группа тайлов: тайлы объектов земляного ландшафта06 - OBJ32-06.ICN.pdf
07OBJ32-07.ICN1688-я группа тайлов: тайлы общих объектов07 - OBJ32-07.ICN.pdf
08MTN32.ICN1329-я группа тайлов: тайлы гор08 - MTN32.ICN.pdf
09TREE32.ICN10110-я группа тайлов: тайлы деревьев09 - TREE32.ICN.pdf
0ATOWN32.ICN12011-я группа тайлов: тайлы городов и замков0A - TOWN32.ICN.pdf
0BRSRC32.ICN8912-я группа тайлов: тайлы шахт, Города драконов, Маяка и ресурсов0B - RSRC32.ICN.pdf
0CMONS32.ICN3413-я группа тайлов: тайлы монстров0C - MONS32.ICN.pdf
0DART32.ICN3814-я группа тайлов: тайлы артефактов0D - ART32.ICN.pdf
0EFLAG32.ICN2815-я группа тайлов: тайлы флагов0E - FLAG32.ICN.pdf

 Downloads
GROUND32.TIL.pdf
(171.4 КБ) Скачиваний: 416

00 - OBJ32-00.ICN.pdf
(119.42 КБ) Скачиваний: 395

01 - OBJ32-01.ICN.pdf
(131.26 КБ) Скачиваний: 435

02 - OBJ32-02.ICN.pdf
(48.42 КБ) Скачиваний: 396

03 - OBJ32-03.ICN.pdf
(112.12 КБ) Скачиваний: 402

04 - OBJ32-04.ICN.pdf
(126.75 КБ) Скачиваний: 402

05 - OBJ32-05.ICN.pdf
(107.07 КБ) Скачиваний: 410

06 - OBJ32-06.ICN.pdf
(113.67 КБ) Скачиваний: 389

07 - OBJ32-07.ICN.pdf
(138.09 КБ) Скачиваний: 405

08 - MTN32.ICN.pdf
(174.58 КБ) Скачиваний: 407

09 - TREE32.ICN.pdf
(159.77 КБ) Скачиваний: 428

0A - TOWN32.ICN.pdf
(161.63 КБ) Скачиваний: 411

0B - RSRC32.ICN.pdf
(128.77 КБ) Скачиваний: 405

0C - MONS32.ICN.pdf
(108.07 КБ) Скачиваний: 403

0D - ART32.ICN.pdf
(108.45 КБ) Скачиваний: 416

0E - FLAG32.ICN.pdf
(42.62 КБ) Скачиваний: 409

* * *
Сначала рисуются тайлы ландшафта (Cлой/Layer 0), затем - тайлы объектов ландшафта на заднем плане (Cлой/Layer 1), следом идут герои и корабли, а последними - тайлы объектов ландшафта на переднем плане (Cлой/Layer 2). Т.о. герои и корабли закрывают тайлы слоёв 0 и 1 (рисуются поверх них), а тайлы слоя 2 закрывают героев и корабли.

Двумерный массив структур клеток карты имеет размер 72х72 (TTile Tile[72][72]) и расположен по смещению 3E6h в файле сохранения и по смещению 55Аh в файле карты (по смещению 6 в файлах карт кампаний и карт без заголовка). Структура клетки карты (TTile) состоит из 10 однобайтовых полей, т.о. размер этой структуры равен 10 байтам. Первое поле структуры - номер тайла ландшафта, второе и третье поля содержат информацию о слое 1: номер графического ресурса ICN и номер тайла объекта ландшафта внутри этого ICN соответственно, четвёртое и пятое - аналогичную информацию о слое 2. Если слой отсутствует, поля слоя получают значения 00 FF.

Однако есть один нюанс: флажки, которыми обозначается принадлежность объекта игроку, рисуются после слоя 1 или 2 (в зависимости от того, где находятся). В этом случае номер графического ресурса ICN, содержащего флажки, - 0Eh - помещается в старший полубайт второго (для слоя 1) или четвёртого (для слоя 2) поля структуры TTile.

Например, на рисунке ниже отмеченный тайл замка находится в графическом ресурсе TOWN32.ICN, который имеет порядковый номер 0Ah (см. таблицу выше), и лежит в первом слое, поэтому значение второго поля структуры клетки будет равно 0Ah. А вот значение второго поля струкруры клетки справа от отмеченного тайла будет равно 0EAh, т.к. клетка содержит флаг игрока. Аналогично для лесопилки: 0Вh и 0EBh для клеток крыши лесопилки без флага и с флагом соответственно. Только в случае лесопилки эти значения будут записаны в четвёртое поле структуры клетки, т.к. тайлы находятся во втором слое (крыша лесопилки закрывает героя).

Изображение

Каким образом игра и редактор карт узнают, какой именно флаг им рисовать? За это (и не только за это) отвечают шестой и седьмой байты структуры клетки. Седьмой байт является битовым полем, т.е. в нём хранятся различные флаги (в данном случае - битовые флаги), которые характеризуют тайл: 76543210. Бит 0 этого поля отвечает за зеркальное отражение тайла ландшафта по вертикали, а бит 1 - по горизонтали. Если же установлен бит 4, то тайл имеет флаг, а порядковый номер флага (ID) внутри ICN с флагами попадает в шестой байт структуры клетки.

Таблица 2. Битовые флаги седьмого поля (Flags) структуры клетки TTile

№ битаОписание
0Зеркальное отражение тайла ландшафта по вертикали
1Зеркальное отражение тайла ландшафта по горизонтали
2Тайл объекта ландшафта в слое 1 требует анимацию *
3Тайл объекта ландшафта в слое 2 требует анимацию *
4Поверх тайла расположен ещё один тайл в слое 1 **
5Поверх тайла расположен ещё один тайл в слое 2 **
6На клетке расположен активный герой (в том числе и на корабле) ***
7На клетке расположен декоративный объект 32h (цветы, камни, ямы от раскопок и т.п.) ***

* Монстры считаются анимированными по умолчанию и не требуют установленных флагов анимации.
** Порядковый номер (ID) графического ресурса ICN попадает в старший полубайт второго (для слоя 1) / четвёртого (для слоя 2) поля структуры клетки, номер тайла объекта ландшафта внутри ICN попадает в шестой байт. Примеры: флаг игрока у ворот города/замка, тележка с ресурсами в шахтах (слой 1), флаг игрока над шахтами, городом драконов, маяком (слой 2).
*** Этот флаг устанавливается уже в игре: бит 6 устанавливается в 1 при получении фокуса героем и сбрасывается при потере (в т.ч. при скроллинге карты). Скорее всего, чисто технический флаг, связанный, например, с кастом Dimension Door (игра определяет по этому флагу, нужно ли центрировать героя), бит 7 - для всех одноклеточных декоративных объектов c ID = 32h (тоже технический флаг, связанный с отрисовкой тайла; в частности, пропускает анимацию монстров).

В восьмом и девятом полях находятся ID объектов, полностью или частично расположенных на клетке. Если на клетке расположен только один объект, его ID попадает в девятое поле, если два - ID объекта на переднем плане попадает в восьмое поле, а объекта на заднем - в девятое. Не следует путать ID объекта и ID тайлов этого объекта. Объект - это совокупность всех его тайлов. Так, например, объект "Лаборатория алхимика" имеет ID = 1 и состоит из 10 тайлов: 4-х статичных и 6-ти тайлов анимации, каждый из которых имеет свой уникальный ID. Далее, при клике правой кнопкой мыши на любом из тайлов объекта отображается название объекта, общее для всех тайлов, из которых этот объект состоит (однако если на клетке расположены тайлы двух разных объектов, то подсказка отображается для объекта на заднем плане). Также восьмое поле отвечает за проходимость: если в нём установлен бит 7, то такой тайл непроходим.

Тайл объекта может быть интерактивным (обычно это клетка-вход в объект: ворота города/замка, вход в шахту и т.д.). Многие одноклеточные объекты являются интерактивными: жилища существ, присоединяющихся бесплатно, сундуки с сокровищами, кучки ресурсов и т.д. В многоклеточных объектах обычно только одна интерактивная клетка. В девятом поле (ObjectID) любой интерактивной клетки объекта установлен бит 7. Клетка объекта, в поле ObjectID которого этот бит не установлен, не является интерактивной. Возвращаясь к примеру с "Лабораторией алхимика": любой тайл этого объекта, кроме входа, имеет поле ObjectID равное 1, вход - 1 or 80h = 81h (установлен бит 7).

:!: Довольно интересным примером объекта - причём невидимого - являются клетки, на которых можно высадиться с корабля: они имеют ID = 1Fh (назовём такой объект "якорем").

Иногда на картах и вовсе встречаются ошибки. Например, такая: вроде как, высадиться по всем правилам на клетке можно, а на практике не получается. Смотрим поле ObjectID и видим, что там находится невидимый Маяк. Скорее всего, при его удалении в редакторе карт возникнул баг (клетка 58:56 на карте "Остров песка"). Также существует известная "багофича", когда после взятия кучки ресурсов/сундука с сокровищами/артефакта, лежащего на берегу, клетка становится недоступной для высадки. Если посмотреть на восьмое поле структуры такого тайла, то можно увидеть, что в нём не хранится "якорь" (1Fh), который должен помещаться в девятое поле тайла после исчезновения с карты объекта на переднем плане.

В последнем - десятом - поле структуры клетки карты хранятся различные характеристики объекта (иногда в запакованном виде). В общем случае каждый объект по-разному хранит свои характеристики. Например, десятое поле (поле PackedObjectInfo) тайла монстра хранит кол-во и лояльность отряда (отряд лоялен, если установлен бит 7), артефакта - тип его охраны или стоимость выкупа (1 - артефакт достанется бесплатно, 2 - придётся сразиться с 50 разбойниками, 3 - потребуется заплатить 2000 золотых) и т.п. В файле карты у тайлов объектов со случайным/переменным содержимым это поле остаётся пустым (00), оно заполняется уже игрой при загрузке карты.

 Простой пример разбора тайла
Разберём в качестве примера отмеченную клетку карты на рисунке ниже:

2.png
2.png (292.05 КБ) Просмотров: 1325
Структура тайла - 50 0B 41 04 3C 00 08 31 9D 04. В слое 0 находится тайл лавового ландшафта с ID = 50h (см. GROUND32.TIL и остальные файлы из таблицы в начале данного сообщения), в слое 1 (на заднем плане) - кучка кристаллов (0B 41), в слое 2 (на переднем плане) - кратер вулкана (04 3С). Седьмой байт-битовое поле (08h = 1000b) говорит о том, что слой 2 клетки требует анимацию (лавы), байты 31 9D 04 говорят о том, что на переднем плане находится объект с ID = 31h (это декоративный объект ландшафта (вулкан); ID объектов приведены в таблице 3), на заднем плане - интерактивный объект (ресурсы, ID = 1Dh): 1Dh or 80h = 9Dh. В кучке находится 4 кристалла (PackedObjectInfo = 04).

Таблица 3. Идентификаторы и характеристики (содержимое) объектов

 Идентификаторы и характеристики (содержимое) объектов
ID объекта (h)НазваниеХарактеристики объекта (PackedObjectInfo)
00Нет объекта00
01Лаборатория алхимикаПорядковый номер объекта (далее - ##)
02Указательный столб00
03Буй00
04Скелет01 - пусто
02 - случайный артефакт
05Пещера демона01: посещена
02: 1000 ед. опыта
03: 1000 ед. опыта + случайных артефакт
04: 2500 золотых + 1000 ед. опыта
05: выкуп героя за 2500 золота
06Сундук с сокровищами 02: 1000 золотых или 500 ед. опыта
03: 1500 золотых или 1000 ед. опыта
04: 2000 золотых или 1500 ед. опыта
07Кольцо фейри00
08Бивачный костёрВ младших 3-х битах - тип ресурса, в старшем полубайте - кол-во
Например, 51h = 0101 0001b, 001b = 1 (ртуть), 0101b = 5 (ед.)
Т.о. в этом бивачном костре можно найти 500 золотых + 5 ед. ртути
09Фонтан00
0AБеседка##
0BВолшебная лампаКол-во джиннов
0CКладбище01: посещено
02: 1000 золотых
03: 2000 золотых
04: 5000 золотых
05: 2000 золотых + случайный артефакт
0DСоломенная хижинаКол-во гоблинов
0EЛетняя избаКол-во крестьян
0FСрубКол-во лучников
10ИзбушкаКол-во гномов
11Зимняя избаКол-во крестьян
12Таверна 1 *
13Таверна 2 *
14Таверна 3 *
15Таверна 4 *
16Город драконов00
17Маяк00
18Водяная мельница00: посещена
01: 500 золотых
02: 1000 золотых
19Шахта##
1AБивуак (монстры)В младших 7 битах - кол-во монстров
Если установлен восьмой бит, отряд лоялен
1BОбелиск##
Оазис00
1DРесурсыКол-во ресурсов
Для золота умножить на 100
1EРозовый куст00
1FЯма в песке/"Якорь"00
20Лесопилка##
21Оракул00
22СвятилищеУвеличенный на 1 номер заклинания
23Разбитый корабль01: посещён
02: 1000 золотых
03: 2000 золотых
04: 5000 золотых
05: 2000 золотых + случайный артефакт
24Статуя00
25Пень00
26Лебединое озеро *
27ШатрыКол-во кочевников
28Город/замок##
29Менгир00
2AФургоныКол-во разбойников
2BКолодец *
2CВодоворот00
2DВетряная мельница63h (99): посещена, иначе тип ресурса
2EДуб00
2FМегалит *
30Артефакт01: можно получить бесплатно
02: нужно победить 50 разбойников
03: нужно заплатить 2000 золотых
31, 32Декоративные объекты ландшафта **00
33?
34-37Горы00
38-3СДеревья00
3DГерой/Герой на кораблеНомер героя
3EКорабль (пустой)##

* Рудиментарный объект. Таверны 1-4 и Мегалиты посещались героем с заходом в объект (как, например, жилища существ), а Колодец - без (как, например, Фонтан).
** Реки, озёра, цветы, кусты, камни, скалы и т.п.

Иногда можно встретить невидимый объект с ID = 3Fh. Возможно, такой объект и существовал в какой-то очень старой версии игры, но теперь это всего лишь баг. Посмотрите, например, описание клетки 22:45 на карте "Claw ( Easy )".

* * *
Вот как выглядит на карте неиспользуемый объект из OBJECT32.ICN и OVRLAY32.ICN, добавленный с помощью редактирования тайлов:

Изображение

Вода во рву анимирована с помощью циклического сдвига цветов палитры. "Пощупать" этот объект можно, запаковав obj32-07.icn в heroes.agg и загрузив сейв Object32Demo.GM1 из следующего архива:

Object32Demo.zip
(63.86 КБ) Скачиваний: 292

При желании к объекту можно привязать функционал и сменить название с помощью плагина.
Последний раз редактировалось AlexSpl 14 авг 2023, 20:56, всего редактировалось 7 раз(а).
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5518
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2147 раз.

Re: Формат сейвов

Сообщение AlexSpl » 02 май 2019, 15:03

Fog of War (Туман войны)

Game.FogOfWar[72][72] - двумерный массив байтов, каждый из которых представляет собой битовое поле. Расположен по смещению 106DFh в файле сохранения. В младшем полубайте каждого элемента массива хранится информация о полностью видимых игроку клетках, в старшем - о видимых полностью или частично. По частично видимым клеткам проходит граница тумана войны: игрок видит часть клетки, но подсказка по ПКМ - "Неизученная земля".

4321 4321 - номер игрока
7654 3210 - биты клетки тумана войны

Для компьютерных игроков биты старшего полубайта не заполняются.

Так, например, на картинке ниже драконов хотя бы частично видят все игроки, но только первый и второй - полностью:

F3h = 1111 0011b

4321 4321
1111 0011

* * *
Heroes 1 Savegame and Map File Format (v0.92).pdf
(478.31 КБ) Скачиваний: 622
Вернуться к началу

Пред.

Вернуться в Техническая часть

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1