Короткий туториал по работе с телосложением персонажа через скрипты в Fallout 4

Подумала, а чего бы и нет, вдруг, кому пригодится знание, как жирок сбрасывать хотя бы в игре. Тут всего-то пара команд, да советов от меня, как работать со значениями телосложения.

Вот бы в жизни так?

Основы системы телосложения

Телосложение персонажей определяется тремя параметрами:

  • мускулатура
  • толстота
  • худоба

Каждый из них может принимать значение от 0.00 до 1.00, но их сумма не должна превышать 1.00. Т.е. если один параметр равен 1, это автоматически значит, что остальные два по 0.

Примерно так это выглядит изнутри

Если что, если это соотношение будет нарушено, игра сразу не сломается и не вылетит.

Но, думаю, лучше этого избегать.

Соответственно, при правках вам нужно соблюдать это соотношение. В своем моде Динамическое Телосложение я обрабатываю параметры персонажа в следующем порядке:

  • Мускулатура - она в приоритете, как самая желанная характеристика
  • Толстота - она вторая, как самая доступная для роста от еды. После расчетов, я проверяю, чтобы сумма Мускулов и Жира не была больше 1, иначе приравниваю Толстоту к разнице между 1 и Мускулами
  • Худоба - определяю последней по остаточному принципу, вычитая из 1 сумму Мускулатуры и Толстоты.

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

Подготовка

Для начала вам нужно создать новый мод в инструментарии Creation Kit, создать Квест и прикрепить к нему новый скрипт. Как это сделать, я уже показывала тут:

Далее вам нужно иметь F4SE версии минимум 0.3.1, в ней появляется поддержка нужных функций. Также проверьте, что у вас нет ошибки в структуре его папок, иначе компилятор не подхватит библиотеки. Об этом я писала тут:

Скрипты

Ниже будут представлены основные команды для работы с телосложением персонажа игрока PlayerRef. С помощью функции GetPlayerBodyWeight я запоминаю текущее телосложение в переменные типа Float (нецелое число).

Записью ActorBase:BodyWeight bodyWeight мы объявляем в скрипте локальную переменную bodyWeight особого типа ActorBase:BodyWeight, добавленного F4SE. А командой GetBodyWeight - заносим в нее телосложение персонажа PlayerBase.

Затем уже из этой локальной переменной вытаскиваем значения телосложения, присваивая их нашим переменным, например, худобу записью PlayerThin = bodyWeight.Thin.

Scriptname KP_DBW:DynamicBodyWeightScript extends Quest Conditional Actor Property PlayerRef Auto Const float Property PlayerThin Auto Conditional float Property PlayerMuscular Auto Conditional float Property PlayerLarge Auto Conditional Function GetPlayerBodyWeight() ActorBase PlayerBase = PlayerRef.GetActorBase() ActorBase:BodyWeight bodyWeight = PlayerBase.GetBodyWeight() PlayerThin = bodyWeight.Thin PlayerMuscular = bodyWeight.Muscular PlayerLarge = bodyWeight.Large EndFunction Function SetPlayerBodyWeight() ActorBase PlayerBase = PlayerRef.GetActorBase() ActorBase:BodyWeight bodyWeight = PlayerBase.GetBodyWeight() bodyWeight.Thin = PlayerThin bodyWeight.Muscular = PlayerMuscular bodyWeight.Large = PlayerLarge PlayerRef.GetActorBase().SetBodyWeight(bodyWeight) PlayerRef.QueueUpdate() EndFunction

С помощью функции SetPlayerBodyWeight, уже наоборот, применяются к персонажу новые параметры телосложения сначала через присвоение значений переменных к bodyWeight, а затем загрузкой ее значений в игрока командой SetBodyWeight(bodyWeight).

В конце обязательно применяем команду PlayerRef.QueueUpdate(), чтобы принудительно обновить модель персонажа игрока.

Зачем это вообще может быть нужно? Я в своем моде ради эксперимента и иммерсивности реализовала аналог механики морфинга тела из GTA San Andreas.

Также вы можете считывать скриптами телосложение игрока и создавать комментарии НПС по поводу его пуза, например.

33
11
11