RU
Дикий Панда
Дикий Панда
1 947 подписчиков

Так что же такое ESM, ESP, ESL на самом деле и какие у них ограничения?

Прежде всего что же значат эти сокращения?
ESM - Elder Scrolls Master
ESP - Elder Scrolls Plugin
ESL - Elder Scrolls Light
Что же такое эти файлы на самом деле?
Плагин - это база данных всех данных мира, включая данные объектов, диалоги, настройки игрового процесса, размещение объектов, настройки ИИ, ландшафт, ячейки и т. д. Существует несколько типов файлов, связанных с файлами данных. Мастера, Облегченные Мастера и Плагины. В основном идентичны по формату, но имеют некоторые важные отличия.
ESM и ESP - это базы данных имеющие записи с идентификаторами xxYYYYYY, где
xx - номер плагина в порядке загрузки в 16-ричной системе исчисления, в диапазоне от 00 до FF. Таким образом получается что максимально возможное количество подключенных файлов ESP + ESM - 256 шт, в десятичной системе исчисления от 0 до 255. Слот 00 это всегда либо fallout4.esm либо skyrim.esm, и всё что идёт за ними идёт строго по порядку, т.е. фиксируем, что максимально возможное количество подключенных файлов ESP + ESM - 256 шт. Забегая немножко вперёд - использование ESL плагинов отнимает 254 слот - FE, сокращая количество до 254 плагинов. А слот 255, т.е. FF навсегда зарезервирован под временные референсы игрового мира - т.е. игра использует его для того что бы хранить временно размещённые в мире игры объекты. Итого имеем следующее утверждение: пользователю доступно 255 слотов ESP-ESM от 0 до 254 в десятичных числах или в шестнадцатиричных - от 00 до FE.
YYYYYY - это номер каждой записи в плагине. Далее мои домыслы, т.к. информации об этом не видел: Если логика верна, то диапазон этих записей должен быть от 000000 до FFFFFF, то есть максимально возможное количество записей на один плагин - до 16777216. Однако, записи в Fallout4.esm начинаются с 000001, так же как и попытка создать нулевую запись всегда заканчивается безуспешно, предположу что 000000 - это всегда запись заголовка плагина.
Если посчитать максимально возможное количество записей в игре - то 255 х 16 777 216 = 4 278 190 080
Выглядит это вот так
Обратите внимание - все НОВЫЕ записи(красные стрелки) плагина DLCCoast.esm - имеют xx - 03, и свои собственные уникальные YYYYYY.
Однако в плагине так же присутствует запись 001536F2, где xx = 00 соответствует идентефикатору 00 плагина Fallout4.esm. Это значит что плагин DLCCoast.esm не добавляет новую запись в игру, но исправляет уже созданную плагином Fallout4.esm. Если несколько разных плагинов редактируют одну и ту же запись, то игровой движок будет работать ТОЛЬКО с той записью, которая загрузится последней.
Существует ещё одно правило для ESP и ESM: плагины ESM всегда загружаются ДО плагинов ESP. Вне зависимости от того как вы их разместили.
Файл Light Master (.esl) — это новый оптимизированный формат файла, появившийся в обновлении Fallout 4 v1.10. Использование файлов Light Master позволяет загружать больше плагинов, чем было возможно ранее, из-за ограничения 8-битного идентификатора плагина, равного 255. Light Master делает это, используя больше диапазона ID формы для порядка загрузки, при этом также жертвуя максимальной емкостью для записей форм.
Что это значит в переводе на русский язык: если упростить структуру идентификатора ESL плагина и сравнить с идентификатором ESM-ESP - то получится что для ESL плагина это выглядит так: xxxxxYYY, т.е. у нас увеличивается количество возможных плагинов за счёт расширения части идентификатора xxxxx - который отвечает за порядок загрузки и уменьшения той части идентификатора YYY - которая отвечает за количество возможных записей в плагине.
Но xxxxxYYY - это упрощенный вид. На самом деле структура ESL плагина выглядит следующим образом: xxzzzYYY, где
xx - это слот занимаемый ESL плагином в общем пуле идентификаторов. Это всегда слот FE (т.е. 254). Т.о. движок видит ВСЕ записи созданные в ESL плагине в одном слоте FE, т.к. все записи создаваемые в ESL плагинах фактически для игры и являются записями одного слота.
zzz - порядок загрузки внутри слота FE - это позволяет загружать большее количество плагинов, но с меньшим количеством записей. Диапазон значений для этого слота от 000 до FFF - то есть 4096. Это и есть то, о чём знают все - ESL плагинов можно загружать до 4 тысяч штук.
YYY - это уникальные НОВЫЕ записи, которые можно сделать в каждом моде. Их диапазон так же от 000 до FFF.
То есть в абсолютных числах в плагине ESL можно сделать 4096 новых уникальных записей.
Итого - 4096(количество возможных плагинов ESL) х  4096(количество максимально возможных записей в одном плагине ESL) = 16777216. Где-то это число ведь уже было, верно? Точно такое же максимальное количество записей можно сделать в ОДНОМ плагине ESP-ESM.
Иными словами - механизм следующий - один из 255 слотов ESP-ESM дробится на 4096 маленьких кусков, что можно было невероятно увеличить количество плагинов. И в итоге мы вместо 255 слотов имеем 254 слота для ESP-ESM и 4096 слотов для ESL.
При этом абсолютное максимально возможное количество записей остаётся тем же:
255 х 16777216 = 4 278 190 080
Однако теперь это выглядит так:
254(ESP+ESM) x 16777216(макс. кол-во записей в ESP-ESM плагине) + 1(слот 254 или FE) x 4096(количество возможных плагинов ESL) х 4096(количество максимально возможных записей ESL) = 4 278 190 080
Особенности использования ESL файлов:
1. Можно загрузить не более 331 плагина имеющего до 2048 (КАЖДЫЙ) записей ALCH - как я понимаю это объекты типа ЗЕЛЬЕ(POTION). Не знаю почему это ограничение, но их объединяет то, что они не имеют постоянно закрепленного референса в игровом мире. Как я понимаю речь не о самих объектах категории ALCH - а о их размещении непосредственно в мире игры, т.е. того случая когда под них резервируется временный референс.
2. Можно загрузить более 970 плагинов, каждый из которых содержит одну запись CELL и 2047 записей REFR(референс в игровом мире - иными словами предмет лежащий непосредственно в игровом мире, а не в сундуках и инвентарях)
3. Обновление файлов ESL имеет больше ограничений, чем обновление файлов ESP, но их немного. Из-за ограничения в 2048 идентификаторов форм (я так понимаю речь о предметах размещенных в мире с референсными значениями, но не уверен) важно соблюдать осторожность при удалении форм, чтобы не использовать идентификаторы форм удалённых предметов повторно. Игровой движок может неадекватно воспринять ситуацию когда, например, удалена форма оружия с определенным идентификатором, а после с таким же идентификатором загружена форма брони. 
Личное мнение: Полагаю что бы гарантированно безопасно отключить ESL плагин во время прохождения - нужно отключить плагин, и поставить на его место в порядке пустой плагин ESL, после чего загрузить сохраненную игру и пересохраниться - это действие должно удалить все идентефикаторы отключаемого плагина из текущего прохождения. Всё равно, если отключить пустой плагин даже после этой операции - есть возможность некорректного смещения по идентификаторам ZZZ при совпадении YYY в нескольких разных модах.  По этому, получается, что перемещение в порядке загрузки ESL плагина создающего НОВЫЕ записи в процессе прохождения игры - всегда рискованная процедура. Иногда вы сможете заметить разницу, иногда это будет не заметно, но существуют так же случаи, когда это никак не повлияет.
Приведу пример: допустим у нас есть лайт плагины с идентификаторами
A - FE000 и B - FE001.
1) В плагине A есть броня с идентификатором 001, т.е. полная запись брони для игры выглядит так: FE000001.
2) В плагине В - есть пистолет с идентификатором 001, т.е. FE001001
3) Удаляя плагин А - FE000 - мы смещаем плагин B - и теперь он будет иметь идентификатор FE000, а предмет FE000001 - станет бронёй.
Разработчик утверждает что из-за того что для игры это всё один слот - FE, могут возникнуть проблемы из-за такого смещения, игровой движок может некорректно обрабатывать такую подмену информации.
4) В то же время, если мы подставим ПУСТОЙ ESL плагин вместо FE000, то смещения FE001 не произойдёт. Т.о. предмет FE000001 - пропадёт из игры, как и его запись, а предмет FE001001 - останется в игре под тем же идентификатором, т.к. смещения адресов не произойдёт.
Light Plugin
Лайт плагины - также известные как «ESP с флагом ESL» или «ESPFE», это комбинация ESL и ESP. Это файл с расширением .esp, но с флагом заголовка ESL.
Как и легкие мастера, легкие плагины имеют максимальное количество записей не более 4096 форм, между 0x000 и 0xFFF, и во время выполнения объединяются в слот 0xFE.
Легкие плагины загружаются вместе с обычными плагинами. Это означает, что они могут как переопределять другие плагины, так и требовать плагины в качестве мастеров без негативного влияния на порядок загрузки.
Что это значит - фактически это ESL плагин, загружающий все НОВЫЕ записи так же как ESL в 254 слоте, НО игровой движок может различать НОВЫЕ записи от исправления существующих, и, несмотря на то, что новые записи будут загружены в 254 слоте, правки существующих записей будут загружены в том порядке, в котором размещен ESPFE плагин в листе загрузки. Эти плагины - оптимальный инструмент для создания патчей.
В этом ESP-ESL плагине зелёная стрелка - это новая форма, создаваемая плагином, а красные стрелки это изменение уже существующих форм. Новая форма будет создана в слоте FE, изменение существующих форм будет принято согласно листу загрузки плагинов. Плагин будет занимать пространство в 254 слоте - ESL. Это оптимальный вариант для создания патчей между модами.
На последок, отвечу ещё на несколько вопросов:
Что такое Compact FormID?
Это процедура переделывания формата записей плагина из формата для ESM-ESP xxYYYYYY в формат для ESL-ESPFE - xxzzzYYY. При этой процедуре необратимо изменяются ID записей. Эта процедура может быть опасна, в случае если плагин является мастером для других плагинов.
В каких случаях нельзя переделывать из ESP в ESL или ESPFE?
1. В плагине более 2047 записей о размещенных непосредственно в игровом мире предметах (ALCH или REFR).
прим. - теоретически это ограничение можно обойти размещая записи с помощью скриптов - но это достаточно трудозатратно - и самое главное: надо ли?
2. В плагине более новых 4096 записей.
3. В плагине содержащие данные о цветах (сигнатура CLFM) - лично у меня возникала проблема, что в игре они отсутствуют, несмотря на то, что эдит не ругается при сохранении.
4. В плагине содержаться изменения сцен СУЩЕСТВУЮЩИХ(не новых) диалогов - лично у меня возникала проблема, что в этих случаях диалоги происходят молча, без возможности их пропустить.
5. Плагин является очевидным мастерплагином для других плагинов.
6. Плагин является неочевидным мастерплагином для других плагинов, иными словами не имеет очевидных ссылок, но имеет взаимосвязи построенные с помощью скриптов Papyrus. Формат представления ссылок на ESL-ESPFE файлы отличается от формата представления ссылок на ESM-ESP.
Вероятно что есть ещё какие-то случаи ограничений, о которых мне пока не известно.
Резюме:
Действительно ли можно подключить 4096 плагинов ESL? И да и нет.
Есть некоторые ограничения, к которым всё равно невероятно сложно подобраться. Вполне себе можно подключить условных 1000-1500 модов что бы они работали нормально, с точки зрения их обработки игровым движком. Что касается содержимого модов и их общей внутриигровой работоспособности - такое будет невероятно сложно сделать, но возможно и зависит исключительно от навыков и понимания делающего.
Надеюсь помог разобраться в вопросе, а не запутаться еще больше)))
Автор ограничил возможность комментировать этот пост.

Уровни подписки

👉👌Угостить Ядер-Колой!

$ 4 в месяц
👉👌Стать спонсором проекта!
☑️Отправка личных сообщений на бусти
☑️Доступ к закрытым постам на бусти с установкой всего контента и его обновлениями! (без предварительного доступа)
☑️Особая роль в дискорд-сервере.
⚡️Верный профиль дискорда должен быть привязан в настройках профиля Бусти
+ чат

🤩Угостить квантовой Ядер-Колой!

$ 8,5 в месяц
🤩Стать спонсором проекта!
☑️Отправка личных сообщений на бусти
☑️Отправка личных сообщений в дискорде
☑️Доступ к закрытым постам на бусти с установкой всего контента и его обновлениями!
☑️Помощь Панды со сборкой!
☑️Отдельная ссылка на скачивание!
☑️Предварительный доступ к крупным обновлениям!
☑️Особая роль в дискорд-сервере.
⚡️Верный профиль дискорда должен быть привязан в настройках профиля Бусти
+ чат
Наверх