Сделал управляемого дрона. Это оказалось гораздо сложнее, чем я думал. Изначально я предполагал, что просто переключу камеру на монстра и кнопками буду пинать его с помощью велосити. Оно примерно так и вышло, но это оказалось лишь процентов 20 из того, что пришлось сделать дополнительно.
Сначала пришлось определиться с управлением. Нельзя было просто так давать велосити монстру как хочется. Нужно было не задавать новый вектор, а прибавлять вектор к уже существующей велосити. У меня с математикой не очень, поэтому я очень долго с этим просидел, пока не придумал что-то более-менее внятное, подсматривая в код playermove. Идеально не получилось, но играбельно.
Разобравшись с этим, полезли другие проблемы. Начнем с того, что сам по себе дрон - это монстр, сделанный на основе контроллера. И когда я брал контроль над ним (контролирую контроллера, хихи), он мог в любой момент послать меня и полететь куда ему захочется (например, увидев врага). Стрелял он тоже сам по себе. В итоге я задал глобальный флаг для конкретно этого монстра. Перед захватом я обнуляю ему состояние (нет заданий, нет врагов). Если куда-то летел или стрелял - все прекратится. И дальше благодаря этому флагу, функции монстра больше не вызываются - он никого не ищет, никуда не летит. Чистая марионетка, которой я теперь могу управлять.
Выяснилась еще одна интересная особенность - если игрок не находится в PVS монстров, они не могут перейти в состояние combat из idle и не будут искать врагов. То есть, когда я захватил дрона и улетел в другую часть карты, монстры его полностью игнорировали, даже если я по ним стрелял. И даже если дрона оставить там, то ничего не произойдет. Но как только игрок появится в PVS, тут же начнется рубилово. Т.к. это действительно хорошая идея, я не стал это менять, но проблему нужно было решить. Выручил меня ксашмодовский флаг EF_MERGEVISIBILITY. Я задал его дрону и, о чудо, монстры стали видеть его. Проблема решена (я в курсе, что делает данный флаг - но, похоже, это единственное решение).
Дальше пошел завершающий этап багфиксов - проверил сейврестор в разных ситуациях, проверил ситуации если у игрока отбирают пушки, если он сменил пушку, если игрока захватила скриптовая камера… В общем, пришлось сделать много в плане отладки. Результат мне в целом понравился и думаю, что это привнесет разнообразие в геймплей. Правда, дрон появится у игрока в предпоследней главе только.
Видео:
А, и забыл написать про управление. Двигаться на wasd. Приседание - вниз, прыжок - вверх. На правую кнопку мыши - переход в режим от первого лица и обратно. На левую кнопку мыши - в режиме от первого лица стрельба, а иначе - призвать к себе дрон (он полетит к игроку). На клавишу перезарядки - дрон автоматически возвращается в инвентарь. Это можно сделать в любое время, даже находясь в режиме контроля.
У дрона 500 хп и 500 патронов. Эти данные сохраняются при подборе в инвентарь. Во время перехода на следующий уровень эти данные восстановятся до максимальных значений, а дрон вернется в инвентарь, если он был "на выгуле"

Если патроны кончатся - дрон взорвется.