Редактор карт в Disciples II
|
|
norvezskayasemga
|
Дата: Понедельник, 03.02.2020, 19:49 | Сообщение # 661 |
Группа: Последователь (Disciple)
Сообщений: 69
Статус: Offline
|
Приветствую, mak
Цитата mak ( ) Верно, но можно сгенерировать карту на 5 игроков Лишь бы запускалась)
Цитата mak ( ) Это кому-нибудь интересно? Это очень интересно. Сам начал некоторое время назад заниматься вопросом генерации карт и даже нашел некоторое количество единомышленников. Вот на этом дискорд-сервере у нас есть свой закрытый чат: https://discord.gg/NytbmhX (если есть желание, постучите - дам доступ) В конце, похоже, у нас в одном генераторе будет возможность выбрать из нескольких алгоритмов генерации. Ну а по готовности на том же сервере найдется достаточно желающих потестить
Свой мод с блэкджеком и шлюхами Арена с куртизанками и преферансом
|
|
|
|
Saltov
|
Дата: Среда, 05.02.2020, 16:31 | Сообщение # 662 |
Группа: Дракон (Dragon)
Сообщений: 174
Статус: Offline
|
mak, да, интересует. Крайне необходимый инструмент. Есть ли еще какие-то подробности? Чего удалось достичь в разборе .sg? Можно ли распарсить его так, чтобы увидеть структуру по типу как в json или xml?
Девушки подбирают обувь и аксессуары под одежду, чтобы получить бонус собранного комплекта
|
|
|
|
mak
|
Дата: Четверг, 06.02.2020, 01:38 | Сообщение # 663 |
Группа: Неофит (Neophyte)
Сообщений: 5
Статус: Offline
|
Я пробовал писать свой парсер, но быстро бросил эту идею и наткнулся на неплохой, на мой взгляд, инструмент - Kaitai Struct: http://kaitai.io/ В итоге на нем сделал описание формата .sg (сценарий) и из него генерирую код парсера. Я генерирую только парсер на с++, для меня этого оказалось достаточно чтобы написать небольшие утилиты для упрощения дальнейшего разбора и тестирования. Разумеется его силами можно будет перевести данные в json/xml при необходимости или вообще сгенерировать парсер на другом языке. Описание формата не полное, я не до конца разобрался с отдельными кусками, но парсер уже разбирает все объекты всех сценариев в папке exports идущими вместе с Восстанием Эльфов. Под объектами я подразумеваю специальные записи внутри файла .sg. Если коротко, то формат файла следующий:
- Сигнатура - строка "D2EESFISIG" или "MidFile". Определяет некоторые особенности заголовка.
- Заголовок - зависит от сигнатуры, я подробно разбирал только для D2EESFISIG, т.к. именно в этом формате сохраняет редактор карт. Для MidFile подробностей по заголовку меньше, но остальные части файла совпадают, а парсер работает. Когда закончу с первым типом сигнатуры, вернусь к нему.
В заголовке указан его размер, а также некоторые данные о сценарии. Например название, имя автора, размер карты, описание. Похоже что это сделано для быстрого просмотра информации о сценарии в игре/редакторе когда можно выбирать из всего списка. Я имею в виду эти два меню: https://ibb.co/0DWzfpW https://ibb.co/Pw23gWt
- Информация о количестве объектов в файле. По сути это связка id - значение. Id похож на те, что можно встретить в .dbf файлах игры.
- Записи объектов. Массив, записи следуют одна за другой до конца файла. Насколько мне известно из своих опытов, порядок следования не играет роли.
Каждый объект начинается с информации о его типе, затем идет id этого объекта, после него - признак начала данных объекта. Следом расположена информация специфичная для конкретного объекта. Заканчивается запись о конкретном объекте признаком конца данных объекта. Некоторые объекты одного типа могут присутствовать в файле как единственном экземпляре, так и во множественном. Важно что каждый экземпляр имеет уникальный id. Это позволяет одним объектам ссылаться на другие. Объектом может быть сущность явно видимая в редакторе, например: столица одной из рас, руины/лавка торговца/тренировочный лагерь, отряд, гарнизон города, шахта ресурсов. Также есть объекты которые на карте не видны, но реализуют игровую логику. Например событие на карте, блок тайлов карты, квесты, список построек в столице, список изученных заклинаний, информация о сценарии (которая доступна в редакторе в этом меню https://ibb.co/Vj6h2LT и еще немного сверх того что позволяет изменять редактор, например можно пометить карту как официальную и ее автором будет считаться Strategy First).
Описание получилось довольно длинным и сумбурным, мне кажется от него появится больше вопросов чем ответов. У меня есть что написать и про сами id, их логические части (в моем понимании) и про конкретные объекты. Как только добьюсь генерации минимально-играбельной карты, можно будет провести черту и подробно расписать все подробности и детали.
|
|
|
|
Saltov
|
Дата: Пятница, 07.02.2020, 23:46 | Сообщение # 664 |
Группа: Дракон (Dragon)
Сообщений: 174
Статус: Offline
|
Спасибо за информацию.
Цитата mak ( ) Записи объектов. Массив, записи следуют одна за другой до конца файла. Насколько я понимаю, эта же информация потом попадает в различные файлы внутри директории Scens. Известно что–то о назначении тамошних dbf–файлов? Может, в них записывается прохождение игры, постоянно меняется их содержимое.
Девушки подбирают обувь и аксессуары под одежду, чтобы получить бонус собранного комплекта
|
|
|
|
mak
|
Дата: Воскресенье, 09.02.2020, 21:53 | Сообщение # 665 |
Группа: Неофит (Neophyte)
Сообщений: 5
Статус: Offline
|
Цитата Saltov ( ) Насколько я понимаю, эта же информация потом попадает в различные файлы внутри директории Scens. Только то что касается id. Я не смотрел особенно эти .dbf и их использование, но с id разбирался т.к. нужны при генерации карт. Мои наблюдения: Все id в игре это строки из 10 символов. В них я для себя выделил 4 логические части: категория, индекс, тип, подиндекс.
- Категория это первая буква в строке id. Всего категорий, а значит и начальных букв, 4 - такой вывод я сделал на основе того что раскопал в бинарнике редактора карт.
Виды категорий:
- G - Global, такие id используются для юнитов, лидеров, рас, построек в столицах и т.д. Ссылаются на данные в файлах .dbf в папке globals.
- C - Campaign - эта категория для кампаний, при генерации обычной карты сценария такой id нужен лишь один раз и его можно создать самому.
- S - Scenario - в эту категорию попадает все что касается конкретного сценария, карты. Это объекты на карте, события и шаблоны отрядов
- X - External - все что относится к пользовательскому интерфейсу как самой игры, так и редактора карт. В основном это id для разных названий меню, кнопок и сообщений. Ссылаются на данные .dbf в папке interf.
- Индекс - 3 цифры в строке id, следующие за категорией. Это буквально индекс внутри категории.
- Тип - 2 буквы в строке id, идущие следом за индексом.
- Подиндекс - 4 цифры в шестнадцатиричной системе счисления, идущие после типа. Используется для индексации объектов одного типа.
Чтобы было понятнее поясню на примере: Создав карту для 2 игроков в файле карты, помимо других объектов, будут два с типом Player у которых id вида "S143PL0000" для первого игрока и "S143PL0001" для второго, соответственно. Видим что категория у них одна - S, т.к. это объекты сценария. Индекс 143 выбирается самим редактором карт. На данный момент я не знаю правила для выбора индекса, но важно чтобы у всех объектов этой карты была одна категория и один индекс. Случаи когда одна карта ссылается на объекты другой мне не попадались. Тип - "PL", сокращенно от Player. Игра парсит id и на если на основании категории она выбирает откуда читать данные (из .dbf для Global или из .sg для Scenario), то основании типа понимает что можно/нужно делать с объектом на который ссылается id. Вот несколько примеров типов: "SC" - Scenario - объект с информацией о сценарии "OB" - Object count - количество объектов в файле сценария .sg "EV" - Event - событие на карте "UN" - Unit - юнит на карте "UU" - Unit - юнит в глобальном понимании (контент игры), такие типы встречаются в Gunits.dbf. По сути юниты на карте ссылаются на эти id, таким образом игра знает какие описания, анимации и прочие свойства для них загрузить из базы. "BB" - Building - здание в глобальном понимании (контент игры), встречаются в Gbuild.dbf "TA" - надписи в интерфейсе, примеры таких можно найти в TAppEdit.dbf "RR" - Race - игровая раса С подиндексами все проще: у нас два объекта типа PL в сценарии и подиндексы нужны чтобы их различать.Добавлено (13.02.2020, 02:03) --------------------------------------------- Исследую причины по которым генерируемые мной карты не загружаются в игре. Предполагаемая версия - в столицах всегда должен быть защитник или гарнизон. Начал копать тему защитников и обнаружил интересную особенность: наличие защитника в столице не обязательно. Вот пример карты созданной в Scenario Editor, с последующими правками гарнизона столицы: https://ibb.co/098MqZ2 Но есть проблема: один из юнитов гарнизона обязательно должен быть запрещен для перемещения из гарнизона. Таким образом стража можно заменить на любого другого юнита, но оставить столицу совсем без защиты нельзя. Собираюсь копнуть поглубже, возможно я не до конца разобрался и это ограничение можно обойти.
|
|
|
|
Hitlis
|
Дата: Вторник, 08.06.2021, 22:29 | Сообщение # 666 |
Группа: Последователь (Disciple)
Сообщений: 27
Статус: Offline
|
Я тут скачал сагу за Эльфийский Альянс (Союз Эльфов или Эльфийский союз как правильно называется), который для Disciples 2 Rise of the Elves и произошло следующие. У меня третья миссия (или третья карта) не загрузилось. Можете сказать что с этой сагой не так?!
Ссылку оставляю на всякий случай Официальное продолжение кампании эльфов
К добавок я таки не получил ответа от человека, который делал это Кампании из Disciples II: Gallean’s Return
Знаю что поздно спрашиваю.
|
|
|
|
daniyaramina123
|
Дата: Понедельник, 20.09.2021, 16:30 | Сообщение # 667 |
Группа: Неофит (Neophyte)
Сообщений: 1
Статус: Offline
|
А как сделать именно так, чтобы созданный мною нейтральный отряд постоянно появлялся после смерти? То есть, например этот отряд атакует главного лорда какой-то расы и если лорд убил этот отряд, то чтобы потом этот нейтральный отряд снова появился на карте в своем изначальном месте и начал преследовать меня снова и снова? То есть, как наёмники например. Убьешь их, появятся другие такие же наёмники и будут искать тебя и пытаться убить. Также и я хочу сделать. Как так сделать? Подскажите пожалуйста. То есть, мне нужно чтобы каждый ход на одном и том же месте появлялся один и тот же отряд. Очень нужно, прошу, помогите!
|
|
|
|
norvezskayasemga
|
Дата: Вторник, 21.09.2021, 16:55 | Сообщение # 668 |
Группа: Последователь (Disciple)
Сообщений: 69
Статус: Offline
|
daniyaramina123, нужно создать шаблон отряда, а затем создать бесконечное событие с условиями "частота 1", "отряд, который будем создавать, не существует" и "отряд, который будем атаковать, существует"; а последствие - создание отряда с приказом на атаку определенного отряда.
Если намерение довести создание карты до конца серьезное-серьезное, то можно зайти на этот дискорд-сервер https://discord.gg/GmmuTRBQzm , где опытные картоделы делятся опытом
Свой мод с блэкджеком и шлюхами Арена с куртизанками и преферансом
|
|
|
|