Перейти к содержанию

Способ исправления падающих NPC в OpenMW


Set440

Рекомендуемые сообщения

Все пользователи МОРРОШИНД знают наверно такую проблему, что неписи проваливаются сквозь статики даже на ОпенМВ.

 

Мне удалось выяснить подробности о причинах таких провалов.

 

ПОДРОБНОСТИ:

 

Во-первых: давайте определимся, что неписи не падают на землю или в воду, а СТАВЯТСЯ туда инициализацией. Например погонщик из Гнисиса при каждом "падении" с высоты имеет полное здоровье, а лодочница из Тель Аруна стоит под водой на земле... — всё это невозможно при ФИЗИЧЕСКОМ падении. Тоесть, баг никак не относится к физическому движку ВООБЩЕ.

 

ПРИЧИНЫ ПАДЕНИЙ:

 

Непись стоит (или инициализирован в редакторе) на неровности сложного меша, или на стыках мешей.

 

РЕШЕНИЕ ПРОБЛЕМЫ:

 

Неписей нужно передвинуть с неровности на горизонтальную плоскость, дальше от стыков (это будет работать с неписями из Вивека, и дядей из Гнисиса)

 

Тех, что передвинуть невозможно — подпереть невидимой куб-коллизией (тётю из Тель Аруна двигать некуда)

Куб-коллизия всегда находится в секции АКТИВАТОРЫ (имеет высший приоритет), а поскольку она низкополигональная, плоская и не включена в списки отрисовки — срабатывает моментально быстрее всех, и очень надёжно.

 

БЛАГОДАРНОСТИ:

 

В расследовании помогал Scarab-Phoenix

 

PS:

 

Баг связан со сложной математикой вычисления границ мешей и акторов — создатели движка его могут пофиксить ОЧЕНЬ НЕ СКОРО. К счастью, он довольно просто чинится вот-таким костылём. Потому я хочу попросить команду GFM обратить внимание на мой пост.

 

Нам очень повезло, что баг очень предсказуем и логичен, и ведёт себя скорее как фича, нежели что-то паранормальное.

 

https://drive.google.com/open?id=1-E2z-lYB1flXxVTaZPezlWp8ber0kOFw — Фиксит погонщика в Гнисисе и лодочницу из Тель Аруна — они падают при каждом переходе локаций.

Изменено пользователем Set440
Ссылка на комментарий
Поделиться на другие сайты

Тут дело такое, что ручное исправление костылями - это в сто раз сложнее, чем простой ввод команды "ra" в игре :)

 

Видишь, что нет NPC - вводишь "ra" и всё. А лепить повсюду эти невидимые блоки... Да еще пихать это в GFM - не очень хорошее решение. Наверное.

 

 

А там, глядишь, и в OpenMW что-нибудь придумают :)

Ссылка на комментарий
Поделиться на другие сайты

Лучше поблагодарите за то, что этот баг я отловил.

Баг давно известен, если что. Ничего нового вы не открыли.

Ссылка на комментарий
Поделиться на другие сайты

Баг давно известен, если что. Ничего нового вы не открыли.

 

Баг известен, а нормального чертежа костыля небыло.

Был бы чертёж — был бы и прогресс, увы.

Ссылка на комментарий
Поделиться на другие сайты

Баг известен, а нормального чертежа костыля небыло.

Решение слишком костыльное просто. Потому никто им и не занялся.

Ссылка на комментарий
Поделиться на другие сайты

Решение слишком костыльное просто. Потому никто им и не занялся.

В качестве временной меры вполне норм. Возможно, кто-нибудь займётся.

Ссылка на комментарий
Поделиться на другие сайты

На ОпенМВ есть точно 2 таких непися, которые падают АБСОЛЮТНО ВСЕГДА (даже когда их восстанавливает ra).

Их может быть максимум 10...

 

Не всех надо подпирать, большинство достаточно подвинуть на пол-метра, на ровную плоскость.

 

====

Все остальные не падают вообще, либо очень рандомно в самых крайних случаях — таких лечит ra по ситуации (и вероятность того, что они упадут снова крайне мала)

Ссылка на комментарий
Поделиться на другие сайты

Достаточно, пока авторы опенМВ не придумают таблетку, дать каждому "падлецу" НПЦ скрипт, который возвращает коррдинату Z при ее расхождении с первоначальным значением.

 

И такой костыль просто не обязателен :)

Ссылка на комментарий
Поделиться на другие сайты

Достаточно, пока авторы опенМВ не придумают таблетку, дать каждому "падлецу" НПЦ скрипт, который возвращает коррдинату Z при ее расхождении с первоначальным значением.

 

И такой костыль просто не обязателен :)

 

Это очень крутая идея!

Смотри:

Если ((НПЦ в воде или стоит на земле) и (оригинальныйZ - текущийZ) > N): ra;

 

Но с таким подходом нужно оригинальныйZ брать из сейва (если нет — из мастера), и выполнять этот код единожды, при инициализации

Ссылка на комментарий
Поделиться на другие сайты

Совать скрипты, совать коллизии — костыль. Но второе хотя бы менее конфликтно

 

Фактически такая вещь (проваливание) может произойти с любым неписем, не только с караванщиками: эдак можно весь мир доп коллизиями заставить. Нужен просто глобальный подход на уровне движка.

Ссылка на комментарий
Поделиться на другие сайты

Такой код лучше писать в виде кастомного патча. (Я у Akortunov"а хочу спросить)

 

Только я как всегда в пролёте с патчами: мне нужен OpenMW под macOS, боюсь что не смогу собрать после патчей...

 

=====

Суть треда: Хлаалу и Телвани сражаются за Одирниран.

Изменено пользователем Set440
Ссылка на комментарий
Поделиться на другие сайты

Совать скрипты, совать коллизии — костыль. Но второе хотя бы менее конфликтно

 

 

Сунь не костыль. Там же написано - в качестве временной меры вполне пойдет.

Это очень крутая идея!

Смотри:

Если ((НПЦ в воде или стоит на земле) и (оригинальныйZ - текущийZ) > N): ra;

 

Но с таким подходом нужно оригинальныйZ брать из сейва (если нет — из мастера), и выполнять этот код единожды, при инициализации

 

Достаточно сравнивать с заданной в КСе координатой Z

Ссылка на комментарий
Поделиться на другие сайты

Достаточно сравнивать с заданной в КСе координатой Z

 

Это если непись не ходит. Кроме-того, можно разозлить и стоячих NPC, чтоб они бегали за тобой — в этом случае непись сместится по Z в зависимости от поверхности. Нужно читать из сейва (если доступно).

 

И ещё: суть падения в том, что либо непись стоит на статике, либо не стоит — третьего варианта нет.

 

В редакторе он ПОДВЕШЕН НАД своим местом, тоесть при постановке он УЖЕ СМЕЩАЕТСЯ.

Потому нужно сравнивать РАЗНИЦА > N

Ссылка на комментарий
Поделиться на другие сайты

Это если непись не ходит. Кроме-того, можно разозлить и стоячих NPC, чтоб они бегали за тобой — в этом случае непись сместится по Z в зависимости от поверхности. Нужно читать из сейва (если доступно).

 

И ещё: суть падения в том, что либо непись стоит на статике, либо не стоит — третьего варианта нет.

 

В редакторе он ПОДВЕШЕН НАД своим местом, тоесть при постановке он УЖЕ СМЕЩАЕТСЯ.

Потому нужно сравнивать РАЗНИЦА > N

 

Но проваливаются только погонщики, потому в качестве временной меры я и предлагал использовать скрипт только на них.

Разницы между подвешенным и "упавшим" на "пол" вы не увидите в игре, с этим проблем нет, проверено.

Ссылка на комментарий
Поделиться на другие сайты

Я использую только коллизии по одной причине: Когда трогаешь неписей — их имена вшиваются в плагин, а я очень хочу чтобы фикс был совместим со всеми локализациями.

 

Не важно, русские, немцы, американцы — все имеют право использовать фикс, с обратной совместимостью, без адаптаций.

 

====

Вот если-бы такой код в виде патча для движка... но разработчики говорят: Приплыли! Не будем мы непонятный баг латать костылём, это мешает отладке!

Ссылка на комментарий
Поделиться на другие сайты

Но проваливаются только погонщики, потому в качестве временной меры я и предлагал использовать скрипт только на них.

Не только. Эрраниль в ГМ Альд-Руна, например, любит падать.

Ссылка на комментарий
Поделиться на другие сайты

Вот если-бы такой код в виде патча для движка... но разработчики говорят: Приплыли! Не будем мы непонятный баг латать костылём, это мешает отладке!

 

Это где такое сказано? Все будет.

 

Не только. Эрраниль в ГМ Альд-Руна, например, любит падать.

 

Хгмм.. сколько играю у меня она ни разу не падала.

Ссылка на комментарий
Поделиться на другие сайты

Способ исправления падающих NPC в OpenMW:
1. Нажать ~
2. Вбить "ra"
3. Нажать "Enter"
4. Нажать ~
 
Если понадобится ещё раз в том же сеансе игры, то:
1. Нажать ~
2. Нажать "клавиша вверх"
3. Нажать "Enter"
4. Нажать ~
 
Если вы ленивая задница, которой лень нажать пять клавиш, а вместо ОпенМВ у вас МГЕ:
Назначаете на любую кнопку где-нибудь на цифровом блоке клавы (например, "7\Home") команду "ra" через мгешный "Macro Editor" и макрос "Console2" — https://tes.ag.ru/cs/mge/mge_tabs_macro.shtml

 

Не благодарите! ;-)

Изменено пользователем morrow
Ссылка на комментарий
Поделиться на другие сайты

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

 

Это работает когда они падают рандомно, и очень редко.

Ссылка на комментарий
Поделиться на другие сайты

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...