Перевод инструкции для пользователя 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
|
|
||||||
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) должны использовать параметр "По Умолчанию". |
||||||
Actor Value |
(Для Эффектов) AV, который нужно изменить. Выбирается из диапазона подходящих значений, определенных родителем Параметра Эффекта.
|
||||||
AV Part |
Часть\модификатор, подвергающийся изменению. За обьяснением различных частей (various parts) обращайтесь к TESCS Wiki по Параметрам Актора. Держите в уме, что с OBME часть AV выбирается вручную в этом поле, а не автоматически в зависисости от флага "Effects Removed" в оригинальной игре. |
||||||
Flags:
|
|
||||||
Deprecated Flags:
|
|
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 |
Использует игровой параметр 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:
|
|
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 |
|
||||||
Flags:
|
|
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 |
Автор: JRoush
Комментарии