Короткий туториал по работе с телосложением персонажа через скрипты в 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.
С помощью функции SetPlayerBodyWeight, уже наоборот, применяются к персонажу новые параметры телосложения сначала через присвоение значений переменных к bodyWeight, а затем загрузкой ее значений в игрока командой SetBodyWeight(bodyWeight).
В конце обязательно применяем команду PlayerRef.QueueUpdate(), чтобы принудительно обновить модель персонажа игрока.
Зачем это вообще может быть нужно? Я в своем моде ради эксперимента и иммерсивности реализовала аналог механики морфинга тела из GTA San Andreas.
Также вы можете считывать скриптами телосложение игрока и создавать комментарии НПС по поводу его пуза, например.