Перевод инструкции для пользователя OBME - Oblivion Magic Extender. Инструкция расскажет об основах магической системы Обливиона, приведет  номенклатуру технических средств её реализации и объяснит, какие именно нововведения привнесены в эту систему модификацией.

примечания переводчика

Это инструкция, приложенная к OBME, в архиве с модификацией. Её перевода мне обнаружить не удалось.

По сути документ представляет собой техническую номенклатуру эффектов магии в игре, описания способов её функционирования, а также нововведений в данную систему со стороны OBME. Вполне полезный документ для всех модеров, который поможет разобраться в магической системе с технической точки зрения.

оглавление

1. Особенности Модификации
2. Обзор Магической Системы Обливиона
3. Параметры Эффектов
3.1 Коды Магического Эффекта
3.1.1 Динамические Коды Эффекта
3.2 Обработчик Эффекта
3.3 Основные Свойства
3.4 Аудиовизуальные Эффекты
3.5 Свойства Эффектов и Магических Объектов
3.6 Сопротивления и Счетчики
3.7 Создание Параметров Эффекта из Скрипта
4. Эффекты
4.1 Основные Поля
4.2 Поля Перезаписи
5. Сопротивления
6. Эффекты Присвоения
7. Враждебность
8. Обработчики Эффектов
8.1 ModifyActorValue
8.2 SummonActor
8.3 SummonBoundObject
8.4 ScriptEffect
8.5 Dispel
8.6 Cure
8.7 Shield
8.8 Absorb
8.9 Calm
8.10 Chameleon
8.11 CommandCreature
8.12 CommandHumanoid
8.13 Darkness
8.14 Demoralize
8.15 DetectLife
8.16 DisintegrateArmor
8.17 DisintegrateWeapon
8.18 Frenzy
8.19 Invisibility
8.20 Light
8.21 Lock
8.22 NightEye
8.23 Open
8.24 Paralysis
8.25 Reanimate
8.26 SoulTrap
8.27 SunDamage
8.28 Telekinesis
8.29 TurnUndead
8.30 Vampirism

1. Особенности модификации

  • Больше возможностей контроля в редактировании Параметров Эффекта и Эффектов в CS.
  • Возможность создавать новые Параметры Эффектов и в CS и внутри игры по скрипту.
  • Расширение полей "Перезаписи" (Override) для Эффектов с целью кастомизации свойств, таких как Имя, Школа, Враждебность, Код VFX, Иконка, AV Сопротивления, Базовая Цена и другие. Эти перезаписи могут быть применены к любому эффекту (а не только к скриптовому).
  • Расширение обработчика ModifyActorValue специфицирует какой именно модификатор задействован.
  • Расширение обработчика  SummorActor позволит кастомные лимиты вызова акторов.
  • Расширение обработчика ScriptEffect позволит использовать скрипты, указанные для всего магического эффекта, а не только для отдельных элементов эффекта.
  • Расширение обработчика Dispel позволит частичное рассеивание эффектов и выборочное рассеивание, основанное на магическом эффекте, обработчике эффекта, враждебности и типе магического обьекта.
  • Активные Эффекты, которые рассеиваются из-за рекаста заклинания или превышения лимитов вызова акторов, могут быть присвоены (reclaimed), то есть остававшаяся для них магия будет использована для усиления эффектов, которые их заменяют.

2. введение в магическую систему обливиона

До моддинга с OBME лучше ознакомиться с основами магической системы Обливиона. Я бы предложил прочесть статьи по магии в TESCS Wiki. Все последующее лишь краткий обзор иерархии магических обьектов.

Magic Item → Effect Item → Effect Setting → Active Effect → Effect Handler

Магический Объект → Эффект → Параметр Эффекта → Активный Эффект → Обработчик Эффектов

Магические Объекты – это Заклинания, Зачарования, Ингредиенты и Зелья. Конкретный тип и другие свойства, такие как цена и уровень мастерства, определяют, как и когда магический объект используется. Рассмотрим стартовое заклинание игрока «Исцеление Малых Ран»: поскольку это заклинание, его кастуют. Базовая цена каста – 14, то есть кастующий должен иметь уровень мастерства ученик в соответствующем навыке и 15 пунктов магии (при навыке в 25 пунктов).

Каждый магический объект содержит список эффектов (Effect Items), ссылающийся на конкретный параметр эффекта и несколько параметров конкретного заклинания (магнитуда, продолжительность). «Исцеление Малых Ран» имеет только один эффект: «Восполнить Здоровье на 8 пунктов на себя». То есть, оно использует эффект «Восстановление Здоровья» и имеет магнитуду в 8 пунктов.

Параметры Эффектов (Effect Settings), таких как «Урон Огнем», «Призыв Скелета» или уже упомянутый «Восстановление Здоровья». Параметр эффекта содержит набор параметров таких как имя, цена или визуальный эффект, определяющий уникальный магический эффект. И действительно, «Параметр Эффекта» и «Магический Эффект» часто взаимозаменяемые понятия.

Когда заклинание или другой магический объект используется по цели, он создает набор Активных Эффектов. Каждый активный эффект соответствует эффекту из магического обьекта и хранит параметры по каждой конкретной цели (такие как, оставшееся время действия, окончательная магнитуда действия). Кастуя «Исцеление Малых Ран», к примеру, игрок создает новый активный эффект на самом себе с магнитудой 6 пунктов, если у игрока есть эффективность заклинаний в 75%.

Когда Активный Эффект создан, он как раз и создает «магию», используя Обработчик Эффектов (Effect Handler). К примеру, для «Исцеления Малых Ран», используется обработчик эффектов «Изменение Параметра Актора» (Modify Actor Value). Этот обработчик поднимает или опускает параметры актора у конкретной цели. Параметры, содержащиеся в параметре эффекта «Восстановление Здоровья», предписывают обработчику поднять параметр Здоровья цели. Параметры, содержащиеся в эффекте и активном эффекте, предписывают обработчику поднять параметр сразу же на 6 пунктов.

3. параметры эффектов

Параметры Эффектов – то, что люди зовут «Магическим Эффектом» в Обливионе. Параметр эффекта содержит много параметров, которые сообща определяют уникальную часть магии. Они могут быть созданы, удалены и изменены с помощью CS диалогового окна «Магические Эффекты». Они скорее всего знакомы всем, даже игрокам, которые не сделали ни единого мода, потому что они перечислены в меню создания заклинаний и зачарований.

3.1 Код Магического Эффекта

Отличие от большинства обьектов  в Обливионе, параметры эффекта не идентифицируются по formID. Вместо этого у них есть свой собственный набор «Кодов Магического Эффекта» (mgefCodes). Эти коды используются всякий раз, когда игре нужно сослаться на конкретный магический эффект. Измени код эффекта, и это сломает всё, что на него ссылается, так что лучше никогда не менять код эффекта в параметрах эффекта после его создания. Если так всё же надо сделать, OBME позволит это только для параметров эффекта, добавленных активным файлом.

Если два мода добавляют два разных параметров эффекта (Effect Settings) с тем же самым кодом эффекта, один перезапишет другой. Чтобы этого избежать моддеры должны убедиться, что их коды эффекта совершенно уникальны среди всех модов. Это точно сомнительно, ведь существует 4 миллиарда возможных кодов в конце-то концов, но для казуальных моддеров это боль.

3.1.1 Динамические Коды Эффекта

Чтобы избежать такой возможности конфликта со статичными кодами эффекта, ОБМЕ может автоматически присвоить «Динамический Код Эффекта».  Динамические коды эффекта работают через ОБМЕ тем же путем, каким formID управляются игрой и CS, то есть они меняются в зависимости от того, в каком месте находится мод в нынешнем порядке загрузки (load order). Поэтому эффекты с динамическими кодами не будут (ненамеренно) конфликтовать с другими модами.

Но есть нюанс. Начиная с 10 версии ОБСе или около того, ОБСЕ позволил модерам зранить и использовать коды эффектов в скриптовых переменных. ОБМЕ не может их исправить так, как он исправляет хранящиеся коды эффектов, поскольку он не знает какая переменная их хранит. Короче говоря, Динамические Коды Эффектов могут сломать некоторые существующие скрипты. Подобные крипты должны быть довольно редки, но всё же, я вас предупреждал.

Вы точно можете написать новый скрипт, который будет вполне себе обрабатываться динамическими кодами эффектов. Главное не хранить код эффекта в переменной между фреймами. К примеру, представьте скрипт, который берет первый эффект конкретного заклинания и использует его в другом блоке:

ref lastSpell

long storedMgefCode

begin OnMagicEffectHit

set lastSpell to GetPlayerSpell

set storedMgefCode to (GetNthEffectItemCode lastSpell, 0)

end

begin GameMode

;; ... Использует код эффекта чтобы что-то сделать

;; это *плохо*, коды динамического эффекта должны

;; поменяться с тех пор как  блок OnMagicEffectHit запущен.

End

Вместо хранения кода, получим его прямо:

ref lastSpell

long storedMgefCode

begin OnMagicEffectHit

set lastSpell to GetPlayerSpell

end

begin GameMode

set storedMgefCode to (GetNthEffectItemCode lastSpell, 0)

;; ... Использует код эффекта чтобы что-то сделать

;; Это *хорошо*, динамический код эффекта действителен до конца блока

end

Иначе можно использовать новую скриптовую функцию ResolveMgefCode, добавленную ОБМЕ. Эта функция может быть вызвана единожды после загрузки сохранения чтобы «разрешить» хранящийся код эффекта:

ref lastSpell

long storedMgefCode

begin OnMagicEffectHit

set lastSpell to GetPlayerSpell

set storedMgefCode to (GetNthEffectItemCode lastSpell, 0)

;; чтобы убедиться, что GetGameLoaded возвращает false, если следующий блок GameMode запускается сразу

GetGameLoaded

end

begin GameMode

if (GetGameLoaded)

set storedMgefCode to (ResolveMgefCode storedMgefCode)

endif

;; ... использует код эффекта чтобы что-то сделать

;; это *хорошо*, динамический код эффекта безопасно разрешен

;; после загрузки игры, учитывая изменения в порядке загрузки

End

3.2 Обработчик Эффектов

Параметры эффектов должны специфицировать какой именно Обработчик Эффектов они используют. В дополнение к самому обработчику параметр эффекта может иметь несколько спец-параметров для обработчика и флагов (таких как formID скрипта, вызванный обьект, параметр актора). За подробностями обращайтесь к Обработчикам Эффектов.

ОБМЕ представляет новые скриптовые функции чтобы получить\присвоить обработчик эффектов и его параметры данному магическому эффекту:

(handlerCode:long) GetMagicEffectHandlerC mgefCode:long

SetMagicEffectHandlerC newHandlerCode:long mgefCode:long

(value:long,ref) GetMagicEffectHandlerParamC paramName:string mgefCode:long

SetMagicEffectHandlerIntParamC paramName:string mgefCode:long newValue:long

SetMagicEffectHandlerRefParamC paramName:string mgefCode:long newValue:ref

Обработчики определены их «Кодом Обработчика». Коды обработчиков и валидные параметры имен прописаны в секции Обработчиков Эффектов. Заметьте, что ОБСЕ имеет похожие функции:

Get(Set)MagicEffectOtherActorValue(C)

Get(Set)MagicEffectUsedObject(C)

Is(Set)MagicEffectDetrimental(C)

Эти функции продолжат работать так, как и запланировано, но лучше использовать новые функции из ОБМЕ.

3.3. Основные Свойства

А дальше текст. Все содержимое этого блока вы можете переписывать по своему усмотрению.

Name Отражаемое имя магического эффекта. Некоторые эффекты (Fortify, Drain, другие) могут "специфицированны" дополнительным текстом.
FormID Параметры эффекта технически являются формами и могут получать formID. Однако, они совершенно игнорируются игрой. Вместо этого параметры эффектов идентифицируются по их Коду Магического Эффекта.
EditorID Эта строка (string) используется для идентификации эффекта в CS во многом по той же схеме, по которой editorID используется другими обьектами. Конкретно множество скриптовых функций, который усваивают char магического эффекта, на деле ожидают editorID (или референс).
Icon Отображаемая иконка эффекта.
Base Cost Множитель (Multiplier) стоимости магии эффекта для использования этого эффекта.
School Какой школе магии принадлежит эффект.
Hostility Враждебность эффекта. Пройдите в секцию Враждебность за подробностями по возможным значениям. Это свойство может быть установлено внутри игры, используя новые команды OBME GetMagicEffectHostilityC и SetMagicEffectHostilityC. Эти функции созданы чтобы заменить команды OBSE Is(Set)MagicEffectHostile(C). Команды OBSE продолжат функционировать, но они не различают состояния "Нейтральный" и "Положительный" (Beneficial).
Effects Removed Он же "Recovers". Для каждого обработчика эффектов, который его поддерживает (а это могут не все), этот флаг обозначает, что всё, что делает эффект, когда применяется по цели, отменяется, когда эффект исчезает.
Remove On Death  Эффект автоматически удаляется при смерти цели.
Explodes with Force  Взрыв использует игровую физику и может двигать физические обьекты (предметы инвентаря, трупы)

 

3.4. Аудио и визуальные эффекты

 

Cast Sound Звук, создаваемый анимацией каста (заклинания).
Bolt Sound Звук, создаваемый движением проджектайла.
Hit Sound Звук, создаваемый в момент приложения эффекта к цели.
Area Sound Неизвестно.
Model Файл .nif, содержащий 3D эффекты для каста, движения проджектайла, целей и зоны действия эффекта.
Hit Shader Он же "Effect Shader". Шейдер Эффекта используется по цели, когда эффект применяется к ней.
VFX Shader Шейдер Эффекта зацикливается на цели пока эффект не рассеивается (то есть в данном случае визуальный эффект длится, а не срабатывает один раз).
No Effects On Hit Нет звука, 3D эффекта или шейдера при применении к цели.
Projectile Type Форма магического проджектайла. Большая часть эффектов использует "Шар", но "Урон Шоком" использует "Болт" (Bolt), а "Урон Морозом" использует "Туман". Также доступен четвертый тип, "Спрей". Тестирование предполагает, что файл модели (Model file) должен содержать соответствующую информацию для выбранного типа проджектайла.
Projectile Sound Скорость, с которой путешествует проджектайл (множится с помощью fMagicProjectileBaseSpeed).

 

3.5. свойства эффектов и магических объектов

Use in Alchemy Эффект доступен для зелий и ингредиентов.
Use in Spells Эффект доступен для Алтарь Создания Заклинаний. Этот флаг игнорируется при создании заклинаний в CS.
USe in Enchantments Эффект дсотупен для Алтаря Зачарований. Этот флаг игнорируется при создании зачарований в CS.
Enchant Factor Скалирует магнитуду эффекта на зачарованиях Брони.
Barter Factor Скалирует стоимость зачарованного предмета.
Has a Magnitude Эффект использует магнитуду Эффектов (Effect Items).
Has a Duration Эффект использует продолжительность Эффектов. Эффекты с мгновенным действием неразрешены на постоянных магических обьектах, таких как Болезни.
Has a Area Эффект использует Область Эффектов. Заметьте, что этот флаг всегда игнорируется на эффект "На Себя", независимости от того, активирован этот флаг или нет.
Has OnSelf Range Может ли Эффект иметь тип "На Себя". Некоторые магические обьекты (Способности (Abilities) и Болезни) используют эффекты только подобного типа.
Has OnTouch Range Может ли Эффект иметь тип "При Касании". Некоторые магические обьекты (Зачарования Оружия) используют эффекты только подобного типа.
Has OnTarget Range Может ли Эффект иметь тип "На Цель". Некоторые магические обьекты (Зачарования Посоха) используют эффекты только подобного типа.

 

3.6. Сопротивление и счетчики

Resistance AV Параметр Актора, который снижает продолжительность или магнитуду эффекта, когда тот применяется к цели.
Counter Effects Список эффектов, который может отменить или ослабить этот эффект. Этот список не имеет прямого магического воздействия, но используется системой ИИ для выора соответствующего противо-заклинания, противоядия, зелья и т.д.

 

3.7. Создание параметров эффекта из скрипта

Новые параметры эффектов могут создаваться в игре, использу скриптовую функцию CreateMgef, добавленную OBME:

(assignedEffectCode:long) CreateMgef newEffectCode:long copyFromEffectCode:long

Первый аргумент может специфицировать уникальный статический код эффекта или же, получая значение 0, запросить динамический код эффекта.
Второй аргумент опционален и специфицирует код эффекта у существующего эффекта чтобы его дублировать. Возвращаемое значение вернет значение кода эффекта от нового эффекта или будет равно нулю при ошибке. Эффекты созданные этой функцией сохраняются в слот сохранения игры точно так же, как созданные игроком зелья и заклинания.

Эта функция аналогична CloneForm, добавленной OBSE, и имеет те же проблемы с раздуванием сохранений (savegame bloat). В общем и целом, создав новый эффект, вы его уже никогда не уничтожите - используйте эту функцию с умом.

4. Эффекты

4.1 Основные Поля

 

Magic Effect Параметр Эффекта для использования.
Magnitude Базовая магнитуда эффекта (до штрафов, сопротивлений и прочего). Использует союственный обработчик, за подробностями обращайтесь к секции индивидуальных обработчиков.
Duration Базовая продолжительность эффекта в секунду. Эффект с нулевой продолжительностью применяется только к одному фрейму. Это поле игнорируется эффектами без флага "Has Duration" (такие эффекты всегда имет нулевую продолжительность). Также игнорируется эффектами "постоянных" магических обьектов, таких как Болезни (они никогда не прекращаются).
Area Радиус, в футах. Когда магический обьект кастуется, каждая подходящая цель в заданном радиусе затрагивается эффектом. Это поле игнорируется теми магическими обьектами, которые нельзя кастовать (Ингредиенты, Способности, т.п.). Также игнорируется эффектами с диапазоном типа OnSelf и эффектами без флага "Has Area".

Range

OnSelf

OnTouch

OnTarget

Эффект применяется к кастующему\пьющему зелье\экипирующему предмет. У некоторых магических обьектов (таких как Зелья) этот диапазон единственный.
Эффект применяетсяпо цели при физическом контакте. . У некоторых магических обьектов (таких как Зачарованное Оружие) этот диапазон единственный.
Эффект обьединяется с другими в проджектайл, который может попасть или не попасть по цели. У некоторых магических обьектов (таких как Зачарования Посохов) этот диапазон единственный. Используя заклинание, свиток и т.д., вы создадите один проджектайл, который содержит все эффекты типа OnTarget.

Handler-Specific Field

Дополнительное поле на каждый эффект для специального использования. Оно используется только одним оригинальным обработчиком, ModifyActorValue, для хранения кода параметра актора (an actor value code).

4.2 Поля Перезаписи

В дополонение основным полям Эффекты могут иметь дополнительные поля "перезаписи". Если они включены, эти значения будут использованы вместо соответствующих значений из перезаписываемых параметров эффекта. К примеру, создав эффект "Урон Огнем" и установив параметр Враждебность во вкладке "перезаписи" на "Нейтральный", вы получите не реагирующих негативно на игрока акторов, если он бьет их этим эффектом. Эти поля используются оригинальной игрой по отношению к секциям Name, School, Hostility и визуальным эффектам чтобы поддерживать скриптовые эффекты (SEFF).

Заметьте, что с OBME каждое поле должно быть "включено" индивидуально чтобы перезаписать оригинальное значение. Отключенные поля перезаписи тоже могут иметь значение, но оно будет полностью проигнорированно игрой. В CS поле перезаписи отмечено серым, если отключено.

Effect Name  Заменяет базовое название эффекта ("Урон Огнем" или "Укрепление Атрибута").
 Base Cost Заменяет базовую цену для исчисления количества магии.
 School Заменяет магическую школу для проверок навыков (skill checks).
 Hostility Заменяет враждебность, которая влияет на враждебность магического объекта целиком. За подробностями обращайтесь к секции Враждебность по возможным параметрам.
 Icon Заменяет иконку, показываемую в инвентаре и интерфейсе.
 Effects Removed Заменяет флаг параметра "Эффект Удален".
 Resistance AV Заменяет эффект сопротивления.
 VFX Code Не соответствует прямо ни одному свойству параметров эффекта. Вместо этого это поле специфицирует другие параметры эффекта, из которых копируется всё, что относится к аудио-визуальной составляющей.
 Handler-Specific
Fields
Дополнительные информация и флаги, связанные с конкретным обработчиком. За подробностями обращайтесь к секции индивидуальных обработчиков. Из оригинальных обработчиков эффектов только ScriptEffect использует эти поля.

 

OBME представляет ряд новых скриптовых функций для манипулирования этими полями перезаписи. Функция Get возвращает актуальное значение поля перезаписи, если то включено, или возвращает значение соответствующего поля из параметра эффекта. Другими словами Get всегда возвращает актуальное значение, используемое игрой. Функция  Set устанавливает актуальное значение для поля перезаписи и включает его, если оно было отключено. Функция Clear отключает поле перезаписи чтобы игра игнорировала значения этого поля.

(name:string) GetNthEIEffectName magicItem:magicItem whichEffect:short
SetNthEIEffectName newName:string magicItem:magicItem whichEffect:short
ClearNthEIEffectName magicItem:magicItem whichEffect:short


(path:string) GetNthEIIconPath magicItem:magicItem whichEffect:short
SetNthEIIconPath newPath:string magicItem:magicItem whichEffect:short
ClearNthEIIconPath magicItem:magicItem whichEffect:short


(hostilityState:short) GetNthEIHostility magicItem:magicItem whichEffect:short
SetNthEIHostility newHostility:short magicItem:magicItem whichEffect:short
ClearNthEIHostility magicItem:magicItem whichEffect:short


(resistAVCode:long) GetNthEIResistAV magicItem:magicItem whichEffect:short
SetNthEIResistAV newResistAVCode:long magicItem:magicItem whichEffect:short
ClearNthEIResistAV magicItem:magicItem whichEffect:short


(baseCost:float) GetNthEIBaseCost magicItem:magicItem whichEffect:short
SetNthEIBaseCost newBaseCost:float magicItem:magicItem whichEffect:short
ClearNthEIBaseCost magicItem:magicItem whichEffect:short


(school:short) GetNthEISchool magicItem:magicItem whichEffect:short
SetNthEISchool newSchool:short magicItem:magicItem whichEffect:short
ClearNthEISchool magicItem:magicItem whichEffect:short


(vfxMgefCode:long) GetNthEIVFXCode magicItem:magicItem whichEffect:short
SetNthEIVFXCode newVFXCode:long magicItem:magicItem whichEffect:short
ClearNthEIVFXCode magicItem:magicItem whichEffect:short


(value:long,ref) GetNthEIHandlerParam paramName:string magicItem:magicItem whichEffect:short
SetNthEIHandlerIntParam paramName:string newValue:long magicItem:magicItem whichEffect:short
SetNthEIHandlerRefParam paramName:string newValue:ref magicItem:magicItem whichEffect:short
ClearNthEIHandlerParam paramName:string magicItem:magicItem whichEffect:short

Валидные параметры имен для Get/SetNthEIHandlerParam перечислены в секции Обработчики Эффектов.
Заметьте, что OBSE вводит похожий функционал:

Get(Set)NthEIActorValue
Get(Set)NthEIScript
Get(Set)NthEIScriptVisualEffect
Get(Set)NthEIScriptSchool
Is(Set)NthEIScriptHostile
Get(Set|SetEX|Mod)NthEIScriptNam

Эти функции продолжат функционировать в оригинальном Скриптовом Эффекте ("Script Effect"), но работать как перезапись для других эффектов (effect items) не будет. Более конкретно, эти функции не будут работать, если поле перезаписи уже включено, но включить или выключить его сами по себе они не могут.

5. Сопротивления

Самое главное запомните, что сопротивления не применяются к эффектам с диапазоном "на себя" или к эффектам не-враждебных магических обьектов. Это включает в себя:

  • все способности, зачарования одежду, ингредиенты, зелья
  • все эффекты заклинаний с диапазоном "На Себя", свитков, сил и посохов
  • любой магический объект с не-враждебными эффектами

Болезни немного другие: Сопротивление Болезням затрагивает шанс игрока подхватить болезнь, но, будучи подхваченной игроком, болезнь тут же игрорирует все сопротивления.

Для магических обьектов, соответствующих критериям, существуют два уровня сопротивления магии. Первый относится к сопротивлению Магических Обьектов, и он модифицирует силу каждого эффекта у обьекта. Для оригинальной игры это заклинания, силы и зачарования типа "Сопротивление Магии" и Сопротивление Яду для зелий. Сопротивление Болезням, как уже сказано, немного особенное. Второй уровень является сопротивлением Магических Эффектов, и он модфицирует силу отдельных эффектов. Параметр актора (AV) использует свойство "Сопротивление AV" из параметров эффекта или самого эффекта.

Если два уровня сопротивления используют разные параметры актора, к примеру, Сопротивление Магии Сопротивление Огню, тогда формула общего сопротивления будет следующей:

ResistanceFactor - (1 - Magic Item Res.\ 100) * (1 - Magic Effect Res. \ 100)

Если оба уровня используют тот же параметр актора, к примеру, оба используют Сопротивление Магии, тогда формула будет проще:

ResistanceFactor - (1 - Magic Item Res.\ 100)

Этот фактор множит базовую продолжительность (или магнитуду для мгновенных эффектов).

Слабости имплементированы в игру как негативные сопротивления и используют ровно те же две формулы.

Отражение Заклинаний и Поглощение применяются до проверки сопротивляемости. Как только отраженное заклинание возвращается кастующему, оно начинает подчиняться всем сопротивлениям как и любое другое заклинание.

Наконец, для заклинаний со свойством "Скриптовый Эффект Всегда Применим" (Script Effect Always Applies), скриптовые эффекты имеют полный иммунитет к отражению, поглощению и всем сопротивлениям.

6. Эффекты присвоения

Большая часть магических объектов, в частности заклинания, могут применяться только по цели. Если они применяются повторно, то первоначальные эффекты отменяются. OBME добавляет механику "присвоения" оставшейся магии и использует её чтобы усилить новые примененные эффекты.

К примеру, предположим игрок кастуем заклинание "Облегченное Бремя", которое имеет единственный эффект "Пёрышко 75 пунктов на 300 секунд на себя" и имеет базовую цену в 75 пунктов магии. После 200 секунд у эффекта остается еще треть от его продолжительности, так что он "стоит" уже около 25 пунктов магии. Если игрок сейчас перекастует это заклинание, вся эта оставшаяся магия будет потеряна.
Но с присвоением некоторая часть магии применяется к новому эффекту, скажем, 80%, а значит около 20 пунктов магии. Тогда новый эффект "Пёрышко" будет стоить 95 пунктов магии вместо 75 и поэтому будет длиться уже 380 секунд вместо 300.

Фракция присвоенной магии контролируется новым параметром игры fMagicReclaimFactor. Если возможно, эффекты усиляются, удлинняя их продолжительность. Мгновенные эффекты или эффекты постоянных магических объектов (таких как Болезни) получают усиление собственной магнитуды. Присвоение также применино к эффектам Вызова (Summon effects), которые уничтожаются при выходе за пределы лимитов призыва.

7. враждебность

OBME привносит новое состояние Враждебности для параметра эффектов, магических объектов и индивидуальных эффектов - "Положительное" (Beneficial). Это переработка старой схемы "Враждебное\Негативное". Как правило, враждебные эффекты ("Урон Огнем") это те, что применяются по врагу. Нейтральные эффекты ("Рассеивание") это те, что могут быть использованы по кому угодно, в зависимости от обстоятельств.

По умолчанию магический обьект рассматривается как Враждебный, если имеет по крайней мере один враждебный эффект. Зелья печально известное исключение. Зелья будет рассматриваться как враждебное (и становится ядом) только если все его эффекты враждебны. Магический объект становится Положительным, если он не имеет враждебных эффектов и имеет по крайней мере один положительный эффект. Магические объекты с одними только нейтральными эффектами или вообще без эффектов рассматриваются как нейтральные.

Для ИИ существует только разделение на Нейтральные\Положительные. Вражеские маги будут всегда использовать враждебные заклинания по боевым целям, а любой актор, получивший урон от враждебного заклинания, будет считать это нападением. Однако все три состояния используются некоторыми обработчиками эффектов (а именно Рассеивание (Dispel)).

Для новых скриптовых функций, берущих и возвращающих три состояния враждебности, нумерические коды таковы:

Neutral 1
Hostile 2
Beneficial 4

8. обработчики эффектов

Обработчики Эффектов - фундаментальные блоки, из которых созидается магия Обливиона. Они являются кусками игрового кода, который и творит всю "магию", то есть повышает здоровье цели, делает их невидимыми, вызывает существо для кастующего. В оригинальной игре присутствуют 31 обработчик эффектов. Наиболее важными являются ’ModifyActorValue’, ’SummonActor’ или ’SummonBoundObject’ - эти трое обработчика используются для имплементации 75% оригинальных магических эффектов. Большая часть оставшихся обработчиков используется лишь одним магическим эффектом на каждый.

Подробности, данные ниже, взяты из персональных тестов и разбора кода. Дополнительные описания и подробности по обработчикам, которые связаны только с одним единственным магическим эффектом, могут быть найдены на UESP Wiki.

8.1. Modify Actor Value

ehCode   ’MDAV’ = 0x5641444D
Description Модифицирует Параметр Актора (ActorValue ) у цели.
Magnitude Определяет насколько поменять то или иное значение параметра. Если флаг "Effects Removed" не установлен и эффект имеет ненулевую продолжительность, то это значение этого поля определяет продолжительность в секундах.
Actor Value
Range

(Для Параметров Эффекта) Пара Параметров Актора специфицирует диапазон. Актуальный AV для модификации выбирается из этого диапазона для каждого эффекта. "По умолчанию" AV устанавливает нижний порог диапазона и "Второй" AV устанавливает верхний порог. Параметр второго AV, установленный на "Нет" (None), обозначает, что все эффекты (effect items) должны использовать параметр "По Умолчанию".
ParamName для скриптов: DefaultAV, SecondAV

Actor Value

(Для Эффектов) AV, который нужно изменить. Выбирается из диапазона подходящих значений, определенных родителем Параметра Эффекта.

ParamName для скриптов: ActorValue - Заметьте, что эттот параметр не может быть отключен\очищен (disabled/cleared) тем же образом, что и другие параметры обработчиков.

AV Part

Часть\модификатор, подвергающийся изменению. За обьяснением различных частей (various parts) обращайтесь к TESCS Wiki по Параметрам Актора. Держите в уме, что с OBME часть AV выбирается вручную в этом поле, а не автоматически в зависисости от флага "Effects Removed" в оригинальной игре.
ParamName для скриптов: AVPart

Flags:

Special treatement
for Abilities

Lowers AV
Effects Removed

В оригинальном Обливионе восстанавливаемые эффекты из заклинаний, подобным Способностям, на игроке всегда применяются к "Базовому" модификатору, а не к "Максимуму". Этот флаг воспроизводит данное поведение. Если не выбран, тогда эффект способности на игре не будет особенным образом обрабатываться.
ParamName для скриптов: AbilitySpecial

(Он же "Вредный" (Detrimental)) снижает значение, обратное увеличению значения
ParamName для скриптов: ActorValue

Изменение инверсируется, когда эффект исчезает

 Deprecated Flags:

UseSkill/UseAttribute
UseAV
Изначально для эффектов, которые используют диапазон возможных значений, по типу "Укрепление Атрибутов" или "Расход Навыка". Эти флаги сейчас игнорируются в CS. Но с беты3 версии 1 они еще определяют, какие AV доступны для алтарей зачарования и заклинаний.
Изначально для эффектов, которые используют только один AV.

8.2 SummonActor

ehCode   ’SMAC’ = 0x43414D53
 Description Создает копию существа или НИПа рядом с целью и устанавливает дружественность его ИИ.
 Magnitude Неиспользуется
 Summoned
Actor
FormID актора, которого вызывают, или списка Уровневого Существа, из которого выбирается вызванный актор. Заметьте, что вызванный акторы обычно имет флаги  "Summonable" и "No Low Level Processing". 
ParamName для скриптов: Summon (только для Параметров Эффектов)
 Summon Limit FormID глобальной переменной, содержащей лимит вызова. Любые эффекты, которые связаны с вызовом, зависят от этого конкретного лимита.
К примеру, скажем, оба "Призыв Скелета" и "Призыв Зомби" зависят от глобальной переменной SummonUndeadLimit со значением 3. Тогда кастующий может вызвать до 3 склетов\зомби одновременно в дополнении к тем призывам, которые используют другие лимиты. Это условие применимо только к эффектам из разных заклинаний. Рекаст того же "Призыва Скелета" три раза подряд даст только одного скелета.
ParamName для скриптов: SummonLimit (только для Параметров Эффектов)

 Flags:

Use
iMaxPlayerSum-
monedCreatures

Использует игровой параметр  iMaxPlayerSummonedCreatures как лимит вызова вместо глобальной переменной.
ParamName для скриптов: UseVanillaLimit (только для Параметров Эффектов)

 Deprecated Flags:

UseActor

(Он же UseCreature) Изначально использовался для различения SummonActor  от других обработчиков параметров.

8.3 SummonBoundObject

 ehCode  ’SMBO’ = 0x4F424D53
 Description Добавляет копию предмета инвентаря в инвентарь цели.
 Magnitude Неиспользуется
 Summon Object FormID предмета, который необходимо добавить
ParamName для скриптов: Summon (только для Параметров Эффектов)

 Deprecated Flags:

UseWeapon

Изначально использовалось для различения SummomBoundObject от других обработчиков эффектов.

8.4 ScriptEffect

 ehCode  ’SEFF’ = 0x46464553
 Description Запускает скрипт, когда эффект применяется или удаляется, и этот скрипт работает каждый фрейм пока он активен. За подробностями пройдите на страничку ScriptEffect TESCS Wiki.
 Magnitude Не используется по умолчанию, но может использоваться скриптом.
 Script FormID скрипта MagicEffect для работы с ним. Значение по умолчанию может быть специфицировано для параметроф эффекта, а индивидуальные эффекты могут перезаписать его их собственными скриптами.
ParamName для скриптов: Script

 User Parameter:

 

User Parameter
UserParam Is
FormID
UserParam is
MgefCode
 
Поле efitParam может использоваться чтобы хранить катомную информацию для скрипта или для другх модов. Этот параметр не добавлен OBME, а сохраняется и загружается оригинальной игрой и CS. OBME просто позволяет моддерам и авторам скриптов прямо его редактировать.
ParamName для скриптов: UserParam (только для Эффектов)

Пользовательский параметр должен загружаться и сохраняться как formID. Это позволяет моддерам хранить formID в этом поле без того чтобы вручную корректировать изменения в порядке загрузки.
ParamName для скриптов: UserParamIsFormID

Пользовательский параметр должен загружаться и сохраняться как код эффекта. Это позволяет моддерам хранить код эффекта в этом поле без того чтобы вручную корректировать изменения в порядке загрузки.
ParamName для скриптов: UserParamIsMgefCode

8.5 Dispel

 ehCode  ’DSPL’ = 0x4C505344
 Description Убирает или ослабляет активные магические эффекту на цели.
 Magnitude Усиляет эффект Рассеивания. Умножается переменной fMagicDispelMagnitudeMult чтобы дать эквивалентное количество магии, которая была рассеяна.
 Effect Setting /
EffectHandler
Код эффекта (рассеять какой-то конкретный магический эффект) или код обработчика (рассеять эффекты, используя какой-то конкретный обработчик эффектов). Если код не определен, тогда все эффекты будут рассеяны в равной степени.
Параметры для скриптов: mgefCode & ehCode - использование одного исключает использование другого.
 Magic Item Type Рассеивает эффекты только из выбранных типов магических объектов
Параметры для скриптов: DispelSpell, DispelDisease, DispelPower,
DispelLesserPower, DispelAbility, DispelScrollEnchantment,
DispelStaffEnchantment, DispelWeaponEnchantment,
DispelApparelEnchantment, DispelAlchemyItem, & DispelIngredient
 Hostility
  • "Положительный" эффект рассеивания рассеивает только "враждебные" эффекты (или магические обьекты, если выбран пункт Treate Magic Items Atomically)
  • "Враждебный" эффект рассеивания рассеивает только "положительные" эффекты (или магические обьекты, если выбран пункт Treate Magic Items Atomically)
  • "Нейтральный" эффект рассеивания рассеивает все эффекты

 Flags:

Treat Magic Items
Atomically
No Partial Dispel
Distribute
Magnitude

 

Рассеивает все магические объекты, а не отдельные эффекты. Либо все эффекты объекта рассеиваются, либо никакие.
Параметры для скриптов: AtomicMagicItem
Эффекты либо убираются полностью, либо оставляются в покое. Если этот пункт не определен, тогда эффекты, которые слишком сильны чтобы их убрать, будут лишь ослаблены. Если используется с пунктом Treate Magic Items Atomically, рассеивание либо уберет полностью магический обьект или полностью оставит его в покое.
Параметры для скриптов: AtomicDispel
Каждый расеиваемый эффект получает фракцию от общей магнитуды рассеивания. Если этот пункт не определен, тогда каждый рассеянный эффект получает всю магнитуду рассеивания. Если используется вместе с пунктом Treate Magic Items Atomically, каждый магический обьект получает фракцию всей магнитуды рассеивания.
Параметры для скриптов: DistributeMagicka

8.6 Cure

ehCode   ’CURE’ = 0x45525543
 Description Убирает специфический тип эффекта - болезни, яды и паралич.
 HardCoded Этот обработчик закодирован функционировать только с оригинальными эффектами "Исцеление Болезней", "Исцеление Отравления" и "Исцеление Паралича".
 Deprecated Новые Эффекты в этом смысле должны использовать расширенный OBME обработчик Dispel.

8.7 Shield

 ehCode  ’SHLD’ = 0x444C4853
 HardCoded Этот обработчик закодирован функционировать только оригинальные эффекты "Щит", "Огненный Щит", "Морозный Щит" и "Шоковый Щит". Он может частично работать для новых эффектов, но это не протестировано.
 No details on this handler yet  

8.8 Absorb

 ehCode  ’ABSB’ = 0x42534241
 No details on this handler yet  

8.9 Calm

 ehCode  ’CALM’ = 0x4D4C4143 
 No details on this handler yet  

8.10 Chameleon

 ehCode  ’CHML’ = 0x4C4D4843 
 No details on this handler yet  

8.11 CommandCreature

 ehCode COCR’ = 0x52434F43 
 No details on this handler yet  

8.12 CommandHumanoid

 ehCode  ’COHU’ = 0x55484F43
 No details on this handler yet  

8.13 Darkness

 ehCode  ’DARK’ = 0x4B524144
 No details on this handler yet  

8.14 Demoralize

 ehCode  ’DEMO’ = 0x4F4D4544
 No details on this handler yet  

8.15 DetectLife

 ehCode  ’DTCT’ = 0x54435444
 No details on this handler yet  

8.16 DisintegrateArmor

 ehCode DIAR’ = 0x52414944 
 No details on this handler yet  

8.17 DisintegrateWeapon

 ehCode  ’DIWE’ = 0x45574944
 No details on this handler yet  

8.18 Frenzy

 ehCode  ’FRNZ’ = 0x5A4E5246 
 No details on this handler yet  

8.19 Invisibility

 ehCode  ’INVI’ = 0x49564E49
 No details on this handler yet  

8.20 Light

 ehCode ’LGHT’ = 0x5448474C 
 No details on this handler yet  

8.21 Lock

 ehCode ’LOCK’ = 0x4B434F4C 
 No details on this handler yet  

8.22 NightEye

 ehCode  ’NEYE’ = 0x4559454E 
 No details on this handler yet  

8.23 Open

 ehCode ’OPEN’ = 0x4E45504F 
 No details on this handler yet  

8.24 Paralysis

 ehCode  ’PARA’ = 0x41524150
 No details on this handler yet  

8.25 Reanimate

 ehCode ’REAN’ = 0x4E414552 
 No details on this handler yet  

8.26 SoulTrap

 ehCode ’STRP’ = 0x50525453 
 No details on this handler yet  

8.27 SunDamage

 ehCode ’SUDG’ = 0x47445553 
 No details on this handler yet  

8.28 Telekinesis

 ehCode ’TELE’ = 0x454C4554 
 No details on this handler yet  

8.29 TurnUndead

 ehCode ’TURN’ = 0x4E525554 
 No details on this handler yet  

8.30 Vampirism

 ehCode VAMP’ = 0x504D4156 
 No details on this handler yet  
Материал подготовлен ArtemSH специально для TGM — Tesall Game Magazine.
Переводчик: ArtSH
Автор: JRoush
1

Комментарии

Авторизуйтесь, чтобы оставить новый комментарий. Или зарегистрируйтесь.