Приветствуем Вас, Прохожий (Guest) | RSS
  • Страница 45 из 45
  • «
  • 1
  • 2
  • 43
  • 44
  • 45
Модератор форума: FairYng  
Lands of Nevendaar » Основной Раздел » Disciples II » Редактор карт в Disciples II (Вопросы, возникающие в процессе работы)
Редактор карт в Disciples II
norvezskayasemga Дата: Понедельник, 03.02.2020, 19:49 | Сообщение # 661
Группа: Последователь (Disciple)
Сообщений: 60
Репутация: 44
Статус: Offline
Приветствую, mak

Цитата mak ()
Верно, но можно сгенерировать карту на 5 игроков

Лишь бы запускалась)

Цитата mak ()
Это кому-нибудь интересно?

Это очень интересно. Сам начал некоторое время назад заниматься вопросом генерации карт и даже нашел некоторое количество единомышленников.
Вот на этом дискорд-сервере у нас есть свой закрытый чат: https://discord.gg/NytbmhX (если есть желание, постучите - дам доступ)
В конце, похоже, у нас в одном генераторе будет возможность выбрать из нескольких алгоритмов генерации. Ну а по готовности на том же сервере найдется достаточно желающих потестить

Свой мод с блэкджеком и шлюхами
Арена с куртизанками и преферансом
Saltov Дата: Среда, 05.02.2020, 16:31 | Сообщение # 662
Группа: Дракон (Dragon)
Сообщений: 168
Репутация: 113
Статус: Offline
mak, да, интересует. Крайне необходимый инструмент. Есть ли еще какие-то подробности?
Чего удалось достичь в разборе .sg? Можно ли распарсить его так, чтобы увидеть структуру по типу как в json или xml?

Девушки подбирают обувь и аксессуары под одежду, чтобы получить бонус собранного комплекта
mak Дата: Четверг, 06.02.2020, 01:38 | Сообщение # 663
Группа: Неофит (Neophyte)
Сообщений: 3
Репутация: 11
Статус: 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)
Сообщений: 168
Репутация: 113
Статус: Offline
Спасибо за информацию.
Цитата mak ()
Записи объектов. Массив, записи следуют одна за другой до конца файла.

Насколько я понимаю, эта же информация потом попадает в различные файлы внутри директории Scens. Известно что–то о назначении тамошних dbf–файлов? Может, в них записывается прохождение игры, постоянно меняется их содержимое.

Девушки подбирают обувь и аксессуары под одежду, чтобы получить бонус собранного комплекта
mak Дата: Воскресенье, 09.02.2020, 21:53 | Сообщение # 665
Группа: Неофит (Neophyte)
Сообщений: 3
Репутация: 11
Статус: 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
    Но есть проблема: один из юнитов гарнизона обязательно должен быть запрещен для перемещения из гарнизона. Таким образом стража можно заменить на любого другого юнита, но оставить столицу совсем без защиты нельзя.
    Собираюсь копнуть поглубже, возможно я не до конца разобрался и это ограничение можно обойти.

  • Lands of Nevendaar » Основной Раздел » Disciples II » Редактор карт в Disciples II (Вопросы, возникающие в процессе работы)
    • Страница 45 из 45
    • «
    • 1
    • 2
    • 43
    • 44
    • 45
    Поиск: